2014-11-20 21 views

Odpowiedz

28

Znalazłem odpowiedź na moje pytanie. Ręczne włączam opcję przesunięciaRefreshLayout, gdy pierwsze dziecko z listy znajduje się na górze listy.

listView.setOnScrollListener(new AbsListView.OnScrollListener() { 
     @Override 
     public void onScrollStateChanged(AbsListView view, int scrollState) { 

     } 

     @Override 
     public void onScroll(AbsListView listView, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
      int topRowVerticalPosition = (listView == null || listView.getChildCount() == 0) ? 
          0 : expandableListview.getChildAt(0).getTop(); 
      refresh.setEnabled((topRowVerticalPosition >= 0)); 
     } 
    }); 
+1

Dzięki nowemu programistowi Androida powyższy fragment rozwiązał problem !!! –

+0

Dzięki, mam ten sam problem z Api 10 ... jego nie w nowszym Apisie. Wydaje się być błędem – Mate

+1

To samo rozwiązanie, nieco łatwiejsze do odczytania tutaj na końcu postu: https://yassirh.com/2014/05/how-to-use-swiperefreshlayout-the-right-way/ –

3

https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html

Według Android docs na powyższy link,

Układ ten powinien być nadrzędny zdania, że ​​zostanie odświeżona w wyniku gestu i obsługuje tylko jedno bezpośrednie dziecko.

Jeśli ListView jest 1 bezpośrednim dzieckiem SwipeRefreshLayout, odświeżanie nie będą uruchamiane przed przewijanie wstecz do góry ListView. Nie musisz nic robić w onScroll().

+1

Tt jest jedynym dzieckiem w widoku. Powyższe rozwiązanie zadziałało jednak dla mnie. – VirtualProdigy

Powiązane problemy