My SwipeRefreshLayout не перестает отображаться после загрузки данных

Я хочу прекратить обновлять 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);
}
}

Я просматривал код, но не могу понять, в чем проблема. нужна помощь

0
0
802
2

Ответы 2

Используйте swipeRefreshLayout.setRefreshing(false); внутри метода onResponse(String response)

setRefreshing(boolean refreshing)

  • Сообщите виджету, что состояние обновления изменилось.

ОБРАЗЕЦ КОДА

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 (false); находится внутри ответа, но у меня не работает

user2940930 27.06.2018 12:30

Удалите swipeRefreshLayout.setRefreshing(true); из метода onRefresh()

AskNilesh 27.06.2018 12:31

Я удалил его из метода onRefresh (), но проблема осталась прежней. Когда я смахиваю его вниз, отображается swipeRefreshLayout и не исчезает

user2940930 27.06.2018 12:37

@ user2940930 убедитесь, что вы не добавили swipeRefreshLayout.setRefreshing(true); после вызова метода loadLikelyProblems(), пожалуйста, проверьте один раз в своей деятельности

AskNilesh 27.06.2018 12:41

Я только что обновил свои действия с помощью кода SwipeRefresh, проверьте его

user2940930 27.06.2018 12:58

Я сделал то же самое, но проблема осталась прежней. У меня нет другого места, где я установил swipeRefreshLayout.set Refreshing (true) ;. Я не знаю что на самом деле не так

user2940930 27.06.2018 13:11

Выложите swipeRefreshLayout.setRefreshing(false); из блоков try-catch и скопируйте это в метод onErrorResponse().

Вызовите loadLikelyProblems из метода onRefresh и удалите из него swipeRefreshLayout.setRefreshing(true);. Удалите swipeRefreshLayout.postDelayed для тестирования и, если он работает, оставьте его.

Saeed Fekri 30.06.2018 13:00

Другие вопросы по теме