2015-08-06 5 views
-1

Я написал код, в котором я получаю данные с использованием данных youtube api, теперь я хотел бы заполнить записи, используя nextPageTolen, потому что у меня около 5000 записей в моем JSON. Вот мой код, который я использую для заполнения в RecyclerView.Android - recyclerView.addOnScrollListener trigger last item in recyclerview

моя проблема, когда я запустить приложение и прокрутите вниз загружает следующую страницу и запустить последний пункт следующей страницы, а затем она не выходит за пределами 2-й страницы и показывает

Toast.makeText(getActivity(), "totalItemCount < pastVisiblesItems", Toast.LENGTH_SHORT).show(); 

Toast сообщения непрерывно
Могут кто-то подскажет мне, где я должен внести изменения в свой код?

Я хочу, чтобы заполнить больше записей, когда пользователь действительно прокручивать вниз

 private boolean loading = true; 
     private int pastVisiblesItems = 0; 
     int visibleItemCount, totalItemCount, firstVisiblesItem; 


     listVideos.addOnScrollListener(new RecyclerView.OnScrollListener() { 
     @Override 
     public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
      super.onScrolled(recyclerView, dx, dy); 
      visibleItemCount = listVideos.getChildCount(); 
      totalItemCount = linearLayoutManager.getItemCount(); 
      firstVisiblesItem = linearLayoutManager.findFirstVisibleItemPosition(); 
      int lastVisibleItemCount = linearLayoutManager.findLastVisibleItemPosition(); 

      if (loading) { 
       Log.v("...", "totalItemCount < pastVisiblesItems"); 

       **Toast.makeText(getActivity(), "totalItemCount < pastVisiblesItems", Toast.LENGTH_SHORT).show();** 

       if (totalItemCount > pastVisiblesItems) { 
        loading = false; 
        pastVisiblesItems = totalItemCount; 
       } 
      } 

      if (!loading){ 
       if (totalItemCount > 0){ 
        if ((totalItemCount - 1) == lastVisibleItemCount){ 
         Log.v("...", "Last Item Wow !"); 
         Toast.makeText(getActivity(), "Last Item", Toast.LENGTH_SHORT).show(); 
         loadMoreVideos lMVideos = new loadMoreVideos(); 
         lMVideos.execute(); 
         loading = true; 
        } 
       } 
       else { 
        Log.v("...", "loading = true"); 
        Toast.makeText(getActivity(), "loading = true", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     } 
    }); 
+0

, когда ваша loadMoreVideos задача заканчивается, вы должны установить 'нагрузку = false; '.. надеюсь, что вы делаете это ... – Bharatesh

+0

Я установил load = false; но он сразу вызывает 10-й элемент на 2-й странице при загрузке 2-й страницы .., он должен вызывать 1-й элемент на 2-й странице, и когда я прокручиваю вниз до 10-го элемента, он должен загрузить 3d-страницу и запустить 1-й элемент третьей страницы – Jaydeep

ответ

0

это, как я получаю решение этого вопроса, я отправляю этот ответ для тех, кто имеет такие же pronlems ...

Если вы используете LinearLayoutManager или StaggeredGridLayoutManager, у каждого из них есть метод scrollToPositionWithOffset, который занимает как позицию, так и смещение начала элемента с начала RecyclerView, что, похоже, приведет к тому, что вам нужно (установка смещение в 0 должно совпадать с верхним).

Например:

//Scroll item 2 to 20 pixels from the top 
    linearLayoutManager.scrollToPositionWithOffset(2, 20); 

это работает для меня ... теперь каждый раз, когда новая страница загружает его запускает первый пункт ...