Очистить и заменить элементы списка просмотра в макете SwipeRefresh - PullRequest
0 голосов
/ 04 июля 2019

Я заполняю просмотр списка из сети, используя JSON. Он прекрасно работает ... Но я хотел реализовать метод компоновки SwipeRefresh таким образом, чтобы старые данные заменялись новыми на каждую пользовательскую марку Swipe.

Вместо очистки старых данных новыми, каждый раз в SwipeRefresh добавляются новые данные внизу старых данных.

Я также установил notifysetAdapter, но, похоже, он не работает.

Вот мой код

mSwipeRefreshLayout.post(new Runnable() {
                                         @Override
                                         public void run() {

                                             mSwipeRefreshLayout.setRefreshing(true);
                                             mExampleList.clear();
                                             mExampleAdapter.notifyDataSetChanged();
                                             parseJSON();
                                         }
                                     }
            );


        }
    }


    private void parseJSON() {
        String url = getIntent().getStringExtra(EXTRA_URL);
        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {

                        myProgressBar.setVisibility(View.GONE);

                        try {
                            JSONArray jsonArray = response.getJSONArray("hits");

                            for (int i = 0; i < jsonArray.length(); i++) {
                                JSONObject hit = jsonArray.getJSONObject(i);
                                String videoTitle = hit.getString("title");
                                String link = hit.getString("link");
                           //     String notes = hit.getString("notes");
                          //      String question = hit.getString("question");
//                                String imageUrl = hit.getString("webformatURL");
//                                int likeCount = hit.getInt("likes");

                                mExampleList.add(new ExampleItem(videoTitle,link));
                                mExampleAdapter.notifyDataSetChanged();
                            }


                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                        mSwipeRefreshLayout.setRefreshing(false);
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
                mSwipeRefreshLayout.setRefreshing(false);
            }
        });

        mRequestQueue.add(request);
    }

Мне нужна помощь, чтобы решить эту проблему.

1 Ответ

0 голосов
/ 04 июля 2019

Использовать setOnRefreshListener

 mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
                @Override
                public void onRefresh() {
                     parseJSON();
                    // just on refresh call parseJSON method
                }
            });

Очистите данные в методе parseJSON перед добавлением новых данных и установите notifyDataSetChanged out for loop.

private void parseJSON() {
        String url = getIntent().getStringExtra(EXTRA_URL);
        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {

                        myProgressBar.setVisibility(View.GONE);

                        try {

                            mExampleList.clear();

                            JSONArray jsonArray = response.getJSONArray("hits");

                            for (int i = 0; i < jsonArray.length(); i++) {
                                JSONObject hit = jsonArray.getJSONObject(i);
                                String videoTitle = hit.getString("title");
                                String link = hit.getString("link");
                           //     String notes = hit.getString("notes");
                          //      String question = hit.getString("question");
//                                String imageUrl = hit.getString("webformatURL");
//                                int likeCount = hit.getInt("likes");

                                mExampleList.add(new ExampleItem(videoTitle,link));
                            }

                                mExampleAdapter.notifyDataSetChanged();


                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                        mSwipeRefreshLayout.setRefreshing(false);
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
                mSwipeRefreshLayout.setRefreshing(false);
            }
        });

        mRequestQueue.add(request);
    }
...