2016-05-03 2 views
1

Я использовал SwipeRefreshLayout из v4 библиотеки поддержки в соответствии со следующим способом:Потяните, чтобы обновить в андроиде RecyclerView

swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      refreshItems(); 
     } 
    }); 

    void refreshItems() { 
    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      swipeRefreshLayout.setRefreshing(false); 
     } 
    }, 3000); 
} 

В этой стратегии, если я тяну вниз экран, когда первый элемент списка виден затем onRefresh().

enter image description here

Это называется тянуть вниз, чтобы обновить. Но мне нужен обратный эффект. То есть, если я вытягиваю экран, когда отображается последний элемент списка, тогда должен быть вызван метод или он должен быть уведомлен в любом случае. Является ли это возможным? Если возможно, предоставьте мне способ.

+0

Могу ли я спросить вас, почему вы хотите добиться такого поведения? – Grender

+0

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

+2

Тогда вам следует искать ** «Бесконечный прослушиватель прокрутки» * *, есть некоторые библиотеки, или вы можете написать свою собственную 'onScroll()' реализацию 'OnScrollListener' для этого. – Grender

ответ

1

В классе адаптера RecyclerView/ListView при раздувании последнего элемента вы можете ввести оператор if и вызвать метод.

код, если вы используете RecyclerView: -

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

mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() 
{ 
    @Override 
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) 
    { 
     if(dy > 0) //check for scroll down 
     { 
      visibleItemCount = mLayoutManager.getChildCount(); 
      totalItemCount = mLayoutManager.getItemCount(); 
      pastVisiblesItems = mLayoutManager.findFirstVisibleItemPosition(); 

      if (loading) 
      { 
       if ((visibleItemCount + pastVisiblesItems) >= totalItemCount) 
       { 
        loading = false; 
        Log.v("...", "Last Item Wow !"); 
        //Do pagination.. i.e. fetch new data 
       } 
      } 
     } 
    } 
}); 

добавить также код ниже: -

LinearLayoutManager mLayoutManager; 
mLayoutManager = new LinearLayoutManager(this); 
mRecyclerView.setLayoutManager(mLayoutManager); 
+0

@ KanchanChowdhury проверить мой новый ответ –

+0

Спасибо за ваши усилия. Но это не работает. –

2

Вы сказали это сами, вы используете SwipeRefreshLayout .. Используется для прокрутки, чтобы обновить, не создан/способен достичь вашей цели.

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

0

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

+0

Спасибо. Но это не желаемое поведение. Если последний элемент виден, и я вытягиваю его снова, он не будет уведомлен. –

0

В приложении Android Pull To Refresh aka SwipeRefreshLayout используется всякий раз, когда нам нужно обновить содержимое изображения с помощью вертикального жестового салфетки. Он принимает только один ребенок - компонент, который мы хотим обновить. Он использует механизм слушателя информировать слушателя, который держит этот компонент, который произошел событие обновления ...

Basic Пулл Чтобы обновить/SwipeRefreshLayout код XML:

<android.support.v4.widget.SwipeRefreshLayout 
     android:id="@+id/simpleSwipeRefreshLayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     < Add View's Here..../> 

</android.support.v4.widget.SwipeRefreshLayout> 

Посмотреть больше с примерами из http://abhiandroid.com/materialdesign/pulltorefresh ,

Смежные вопросы