Невозможно прокручивать ListView в swipeRefreshLayout
У меня проблема с SwipeRefreshLayout. У меня есть представление списка в макете, и каждый раз, когда я просматриваю вверх в представлении списка, салфетка, чтобы обновить макет, активизируется, и вы никогда не сможете вернуться назад к вершине макета. У кого-нибудь есть идеи?
Ответы
Ответ 1
Я нашел ответ на свой вопрос. Я вручную разрешаю swipeRefreshLayout, когда первый ребенок в списке находится в верхней части списка.
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));
}
});
Ответ 2
https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html
Согласно Android docs
по приведенной ссылке,
Этот макет должен быть сделан родителем представления, которое будет обновляться в результате жеста и может поддерживать только одного прямого дочернего элемента.
Если ListView
является первым прямым дочерним элементом SwipeRefreshLayout
, обновление не запускается перед прокруткой вверх до вершины ListView
. Вам не нужно ничего делать в onScroll()
.