Я хочу прекратить обновлять recyclerview после загрузки данных, но он продолжает отображаться. Я хочу, чтобы SwipeRefreshLayout исчезал после полной загрузки данных recyclerview
xml
<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:tools = "http://schemas.android.com/tools"
android:id = "@+id/activity_likely_problems"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:paddingBottom = "@dimen/zerodimen"
android:paddingLeft = "@dimen/zerodimen"
android:paddingRight = "@dimen/zerodimen"
android:paddingTop = "@dimen/zerodimen"
android:background = "@color/colorBackground"
android:orientation = "vertical"
tools:context = "com.example.system2.tranxav.LIkelyProblemsActivity">
<android.support.v7.widget.Toolbar
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:id = "@+id/toolbar"
android:background = "@color/background" />
<android.support.v4.widget.SwipeRefreshLayout
android:id = "@+id/likelyProblemSwipeToRefresh"
android:layout_width = "match_parent"
android:layout_height = "wrap_content">
<android.support.v7.widget.RecyclerView
android:layout_below = "@id/toolbar"
android:id = "@+id/likelyProblemRecyclerView"
android:layout_width = "match_parent"
android:layout_height = "wrap_content" />
</android.support.v4.widget.SwipeRefreshLayout>
</LinearLayout>
LikelyProblemActivity
public class LIkelyProblemsActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first_problem);
SwipeRefreshLayout swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.likelyProblemSwipeToRefresh);
swipeRefreshLayout.setOnRefreshListener(this);
swipeRefreshLayout.postDelayed(new Runnable() {
@Override
public void run() {
if (swipeRefreshLayout !=null){
swipeRefreshLayout.setRefreshing(true);
}
loadLikelyProblems();
}
}, 3000);
public void loadLikelyProblems(){
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
StringRequest stringRequest = new StringRequest(Request.Method.GET, LIKELY_PROBLEM_URL, new com.android.volley.Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.i("info", response);
try {
JSONArray jsonArray = new JSONArray(response);
for (int i=0; i<=jsonArray.length()-1; i++){
JSONObject likelyProblemJson = jsonArray.getJSONObject(i);
likelyProblem = likelyProblemJson.getString("problems");
LikelyProblems likelyProblems = new LikelyProblems(likelyProblem);
mlikelyProblems.add(likelyProblems);
mRecyclerView.setAdapter(likelyProblemAdapter);
}
likelyProblemAdapter.notifyDataSetChanged();
swipeRefreshLayout.setRefreshing(false);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new com.android.volley.Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
int socketTimeout = 30000;
RetryPolicy retryPolicy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
stringRequest.setRetryPolicy(retryPolicy);
requestQueue.add(stringRequest);
}
@Override
public void onRefresh() {
swipeRefreshLayout.setRefreshing(true);
}
}
Я просматривал код, но не могу понять, в чем проблема. нужна помощь
Используйте swipeRefreshLayout.setRefreshing(false); внутри метода onResponse(String response)
Сообщите виджету, что состояние обновления изменилось.
ОБРАЗЕЦ КОДА
StringRequest stringRequest = new StringRequest(Request.Method.GET, LIKELY_PROBLEM_URL, new com.android.volley.Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.i("info", response);
try {
JSONArray jsonArray = new JSONArray(response);
for (int i=0; i<=jsonArray.length()-1; i++){
JSONObject likelyProblemJson = jsonArray.getJSONObject(i);
likelyProblem = likelyProblemJson.getString("problems");
LikelyProblems likelyProblems = new LikelyProblems(likelyProblem);
mlikelyProblems.add(likelyProblems);
mRecyclerView.setAdapter(likelyProblemAdapter);
}
likelyProblemAdapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
swipeRefreshLayout.setRefreshing(false);
}
}, new com.android.volley.Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
swipeRefreshLayout.setRefreshing(false);
}
});
int socketTimeout = 30000;
RetryPolicy retryPolicy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
stringRequest.setRetryPolicy(retryPolicy);
requestQueue.add(stringRequest);
}
РЕДАКТИРОВАТЬ
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
loadLikelyProblems();
}
});
Удалите swipeRefreshLayout.setRefreshing(true); из метода onRefresh()
Я удалил его из метода onRefresh (), но проблема осталась прежней. Когда я смахиваю его вниз, отображается swipeRefreshLayout и не исчезает
@ user2940930 убедитесь, что вы не добавили swipeRefreshLayout.setRefreshing(true); после вызова метода loadLikelyProblems(), пожалуйста, проверьте один раз в своей деятельности
Я только что обновил свои действия с помощью кода SwipeRefresh, проверьте его
Я сделал то же самое, но проблема осталась прежней. У меня нет другого места, где я установил swipeRefreshLayout.set Refreshing (true) ;. Я не знаю что на самом деле не так
Выложите swipeRefreshLayout.setRefreshing(false); из блоков try-catch и скопируйте это в метод onErrorResponse().
Вызовите loadLikelyProblems из метода onRefresh и удалите из него swipeRefreshLayout.setRefreshing(true);. Удалите swipeRefreshLayout.postDelayed для тестирования и, если он работает, оставьте его.
swipeRefreshLayout.setRefreshing (false); находится внутри ответа, но у меня не работает