我正在使用JSON从网上填充listview。它的效果很好...但是我想实现SwipeRefresh布局的方法,以便在每一个Swipe用户中,旧数据将被新数据替换。

而不是用新数据清除旧数据,而是在SwipeRefresh上的Everytime始终在旧数据的底部添加新数据。

我还设置了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);
    }





我需要帮助来解决这个问题。

最佳答案

使用setOnRefreshListener

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


在添加新数据之前,先在parseJSON方法中清除数据,然后将notifyDataSetChanged设置为循环。

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);
    }

10-07 20:49