我有两个 child 的SwipeRefreshLayout:RecyclerViewLinearLayout所以我不得不自定义RecyclerView:

recycler_view.setOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            // int topRowVerticalPosition = (recyclerView == null || recyclerView.getChildCount() == 0) ? 0 : recyclerView.getChildAt(0).getTop();
            // swipeRefreshLayout.setEnabled(topRowVerticalPosition >= 0);
            if (!defined) {
                toolbarHeight = ll_header.getMeasuredHeight() + 15;
                footerHeight = ll_footer.getMeasuredHeight() + 15;
                defined = true;
            }
            clipToolbarOffset();
            if ((toolbarOffset < toolbarHeight && dy > 0) || (toolbarOffset > 0 && dy < 0)) {
                toolbarOffset += dy;
            }
            if ((footerOffset < footerHeight && dy > 0) || (footerOffset > 0 && dy < 0)) {
                footerOffset += dy;
            }
            onMoved(toolbarOffset, footerOffset);
        }

        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            // super.onScrollStateChanged(recyclerView, newState);
            if (recyclerView.getAdapter() != null) {
                if (recyclerView.getAdapter().getItemCount() > 0) {
                    int currentPosition = ((RecyclerViewAdapter) recyclerView.getAdapter()).getCurrentPosition();
                    if (currentPosition > limit && currentPosition >= items.size() - 2) {
                        if (!isLoading) {
                            getContent();
                        }
                    }
                }
            }
            LinearLayoutManager llm = (LinearLayoutManager) recyclerView.getLayoutManager();
            if (recyclerView.getAdapter() == null) {
                swipeRefreshLayout.setEnabled(true);
                return;
            }
            swipeRefreshLayout.setEnabled(llm.findFirstCompletelyVisibleItemPosition() == 0);
        }
    });

当LinearLayout下拉时,如何启用SwipeRefreshLayout的刷新?

最佳答案

如果要在LinearLayout上启用SwipeRefresh,则需要将LinearLayout放入ScrollView中:

<android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swipe_refresh_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    <ScrollView
        android:id="@+id/scrollView"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:id="@+id/linearLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            // insert layout components here ...

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

关于android - 如何使用内部两个 View 刷新SwipeRefreshLayout,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34174297/

10-11 15:01