如何用里面的两个视图刷新SwipeRefreshLayout

时间:2015-12-09 08:46:03

标签: android pull-to-refresh swiperefreshlayout

我有两个孩子的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?

2 个答案:

答案 0 :(得分:8)

如果要在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>

答案 1 :(得分:1)

试试此代码段

recycler_view.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
            }

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {

                swipeRefreshLayout.setEnabled(llm.findFirstCompletelyVisibleItemPosition() == 0);
            }
        });