2013-05-10 16 views

Odpowiedz

3

Wystarczy Dodano wsparcie dla StaggeredGridView w Chris Banes Android-PullToRefresh. Obsługuje także Actionbar-PullToRefresh dla ActionBarSherlock.

+0

Biblioteka PullToRefresh jest przestarzała ... Jakieś rozwiązanie dla nowej wersji Chris Banes? –

+0

Opublikuj link do nowej wersji. Zajrzę do niego. – Mihir

+0

https://github.com/chrisbanes/ActionBar-PullToRefresh Udało mi się sprawić, żeby działało, gdy tylko pierwszy element listy jest nadal widoczny, ale nadal nie daje najlepszego UX, kiedy przewijasz w dół i pierwszy element jest nadal widoczny, nie można przewijać w górę, ponieważ zostanie odświeżony. –

0

Dołącz widok siatki w SwipeRefreshLyout.

 <android.support.v4.widget.SwipeRefreshLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/swipeLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

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

Dodaj detektor onScroll dla widoku siatki w onViewCreated. Ustaw warunki po włączeniu odświeżania.

swipeRefreshLayout = (SwipeRefreshLayout)findViewById(R.id.swipeLayout); 
    swipeRefreshLayout.setColorSchemeResources(R.color.theme_color); 
    swipeRefreshLayout.setOnRefreshListener(this); 
    gridView.setOnScrollListener(new AbsListView.OnScrollListener() { 
     @Override 
     public void onScrollStateChanged(AbsListView absListView, int i) { 
     } 

     @Override 
     public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
      int dist = gridView.getDistanceToTop(); 

      if (dist == 0) 
       swipeRefreshLayout.setEnabled(true); 
      else { 
       swipeRefreshLayout.setEnabled(false); 
      } 

     } 
    }); 

Następnie dodaj funkcję onRefresh.

 @Override 
    public void onRefresh() { 
     if (!swipeRefreshLayout.isRefreshing()) { 
      swipeRefreshLayout.setRefreshing(true); 
     } 
     //add functionality then set refresh to false 
     swipeRefreshLayout.setRefreshing(false); 
    }