【问题标题】:Endless RecyclerView - progress bar are not disappearingEndless RecyclerView - 进度条没有消失
【发布时间】:2016-03-22 09:30:10
【问题描述】:

我正在使用 RecyclerView 并以十个批次从 API 获取对象。对于分页,我使用 EndlessRecyclerOnScrollListener 并遵循本教程Endless RecyclerView

我的问题:在滚动程序中添加进度条并在从服务器获取数据后将其删除。但就我而言,它不起作用。 ProgressBar 仍在下载中

获取数据的方法

private void makeJsonObjectRequest(int startList,int endList,final JsonObjectListener listener) {
            JsonArrayRequest movieReq = new JsonArrayRequest(url,
                    new Response.Listener<JSONArray>() {
                        @Override
                        public void onResponse(JSONArray response) {
                            Log.d(TAG, response.toString());
                            i = startLsit;
                            while(i < endList) {
                                try {
                                    JSONObject obj = response.getJSONObject(i);
                                    Movie movie = new Movie();

                                  /***** TONS OF CODE  *****/

                                        movieList.add(movie);
                                    }

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

                                }
                              i++;
                              lastNumber = i;
                            }
                            mAdapter.notifyDataSetChanged();
                            listener.onDone(lastNumber);
                        }
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d(TAG, "Error: " + error.getMessage());

                }
            });
            AppController.getInstance().addToRequestQueue(movieReq);

        }

我使用方法的地方:

 makeJsonObjectRequest(0, 9, new JsonObjectListener() {
                       @Override
                       public void onDone(int lastNumberI) {
                           lastNumber = lastNumberI;
                       }

                       @Override
                       public void onError(String error) {

                       }
                   }); }

   mAdapter = new RVAdapter(getContext(),movieList,this,mRecyclerView);
        mAdapter.setClickListener(this);
        mRecyclerView.setAdapter(mAdapter);

        mAdapter.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore() {
                movieList.add(null);
                mAdapter.notifyItemInserted(movieList.size()-1);
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        //   remove progress item
                        movieList.remove(movieList.size()-1);
                        mAdapter.notifyItemRemoved(movieList.size());
                        //add items one by one
                        int start = lastNumber;
                        int end = start + 9;
                        makeJsonObjectRequest(start, end, new JsonObjectListener() {
                            @Override
                            public void onDone(int lastNumberI) {
                                lastNumber = lastNumberI;
                            }

                            @Override
                            public void onError(String error) {

                            }
                        });
                        mAdapter.setLoaded();
                    }
                }, 2000);
            }
        });

我的适配器是这样的Endless RecyclerView

【问题讨论】:

  • 每次都这样吗?
  • @JacksonChengalai 是的,每次

标签: android android-recyclerview


【解决方案1】:

得到响应后,您必须删除那个 null 电影对象并通知适配器

 private void makeJsonObjectRequest(int startList,int endList,final JsonObjectListener listener) {
            JsonArrayRequest movieReq = new JsonArrayRequest(url,
                    new Response.Listener<JSONArray>() {
                        @Override
                        public void onResponse(JSONArray response) {
                            Log.d(TAG, response.toString());
                        movieList.remove(movieList.size()-1);
                        mAdapter.notifyItemRemoved(movieList.size());
                            i = startLsit;
                            while(i < endList) {
                                try {
                                    JSONObject obj = response.getJSONObject(i);
                                    Movie movie = new Movie();

                                  /***** TONS OF CODE  *****/

                                        movieList.add(movie);
                                    }

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

                                }
                              i++;
                              lastNumber = i;
                            }
                            mAdapter.notifyDataSetChanged();
                            listener.onDone(lastNumber);
                        }
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d(TAG, "Error: " + error.getMessage());

                }
            });
            AppController.getInstance().addToRequestQueue(movieReq);

        }

【讨论】:

  • 我已经在那里做了:movieList.remove(movieList.size()-1); mAdapter.notifyItemRemoved(movieList.size());
  • 收到回复后,您应该删除该视图..它对我有用..还要检查您的 recyclerview 中的 getItemViewType
  • 我注意到有趣的事情:当我缓慢滚动进度条时,进度条绝望,但当我滚动得更快时,它仍然存在。在调试中,我看到滚动更快的方法 onLoadMore 重复
  • 这个链接对你有帮助stackoverflow.com/questions/30681905/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-06
  • 1970-01-01
  • 2018-04-13
  • 2011-06-21
  • 1970-01-01
相关资源
最近更新 更多