Występuje problem z opcją SwipeRefreshLayout. Mam widok listy w układzie i za każdym razem, gdy przewijam w górę w widoku listy, przesunięcie w celu odświeżenia układu jest utrudnione i nigdy nie można przewinąć z powrotem do góry układu. Ktoś ma jakieś pomysły?Nie można przewinąć w widoku listy w swipeRefreshLayout
Odpowiedz
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));
}
});
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()
.
Tt jest jedynym dzieckiem w widoku. Powyższe rozwiązanie zadziałało jednak dla mnie. – VirtualProdigy
Dzięki nowemu programistowi Androida powyższy fragment rozwiązał problem !!! –
Dzięki, mam ten sam problem z Api 10 ... jego nie w nowszym Apisie. Wydaje się być błędem – Mate
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/ –