【问题标题】:RecyclerView with SwipeRefreshLayout is not working consistently带有 SwipeRefreshLayout 的 RecyclerView 无法始终如一地工作
【发布时间】:2015-11-03 07:39:29
【问题描述】:

我知道类似的问题被问了很多次,但它无法解决我的问题。所以我在这里问。我有一个带有 swiperefresh 布局的 recyclerView。我用过这段代码

recyclerView1.addOnScrollListener(new RecyclerView.OnScrollListener() {

            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                //super.onScrollStateChanged(recyclerView, newState);
                try {
                    int firstPos = mLinearLayoutManager.findFirstCompletelyVisibleItemPosition();
                    if (refreshLayout != null) {
                        if (firstPos > 0) {
                            refreshLayout.setEnabled(false);
                        } else {
                            activity.refreshLayout.setEnabled(true);
                            if (recyclerView1.getScrollState() == 1)
                                if (activity.refreshLayout.isRefreshing())
                                    recyclerView1.stopScroll();
                        }
                    }

                } catch (Exception e) {

                }
            }
        });

区分recyclerView的滚动和swipe刷新布局。但是我已经使用这个 [Is there an addHeaderView equivalent for RecyclerView? 向这个 recyclerView 添加了一个标题。现在 recyclerview 中的标题高度太大了,所以在小型设备中

int firstPos = mLinearLayoutManager.findFirstCompletelyVisibleItemPosition();

当只有一半的标题可见时返回 0。它正在启用 swiperefreshlayout。所以我在 recyclerView 中看不到整个标题。谁能帮我解决这个问题。

谢谢

【问题讨论】:

  • 试试这个link希望它有帮助。
  • 投反对票的你能告诉我投反对票的原因吗?

标签: android android-layout android-recyclerview


【解决方案1】:
LinearLayoutManager llm = new LinearLayoutManager(getActivity());
refreshLayout.setOnRefreshListener(new PullRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            refreshLayout.setRefreshing(true);
            // start refresh
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                        refreshLayout.setRefreshing(false);
                         }
            }, 5000);
        }
    });


    recList.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) {
                refreshLayout.setEnabled(llm.findFirstCompletelyVisibleItemPosition() == 0);
        }
    });

【讨论】:

  • 这段代码有什么作用?不要只是复制粘贴代码,添加一点解释。
猜你喜欢
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-10
  • 2018-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多