Невозможно прокручивать 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().