在SwipeRefresh布局上清除并替换listview项目

时间:2019-07-04 15:39:45

标签: java android listview android-adapter

我正在使用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 :(得分:0)

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