1

I am using a RecyclerView and fetching objects from an API in batches of ten. For pagination, I use EndlessRecyclerOnScrollListener and following this tutorial Endless RecyclerView.

My problem: on scrolling programm adding progress bar and delete it after data from server fetched. But in my case it doesn't work. ProgressBar still downloading

Endless RecyclerView

Method that fetched data

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

        }

Place where I use method:

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

My adapter like this Endless RecyclerView

Elaman Aitymbet
  • 505
  • 1
  • 6
  • 21

1 Answers1

1

After getting response, you have to remove that null movie object and notify the adapter

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

        }
Jackson Chengalai
  • 3,877
  • 21
  • 39
  • I already do it there: movieList.remove(movieList.size()-1); mAdapter.notifyItemRemoved(movieList.size()); – Elaman Aitymbet Mar 22 '16 at 10:27
  • after getting the response you should remove that view..Its working for me..Also check your getItemViewType in your recyclerview – Jackson Chengalai Mar 22 '16 at 10:53
  • I notice interesting things: when I scroll slowly progress bar desapire, but when I scroll faster it's remains. In debug I saw that when scrolling faster method onLoadMore repeats – Elaman Aitymbet Mar 22 '16 at 11:07
  • this link will helpful for u http://stackoverflow.com/questions/30681905/adding-items-to-endless-scroll-recyclerview-with-progressbar-at-bottom?rq=1 – Jackson Chengalai Mar 22 '16 at 11:12