【问题标题】:why findLastVisibleItemPosition return 1 while RecyclerView first add data为什么findLastVisibleItemPosition返回1而RecyclerView先添加数据
【发布时间】:2017-07-14 23:07:26
【问题描述】:

在我的项目中,我使用带有 pulltorefresh 的 RecyclerView 并在滚动到底部时加载更多数据。这是一个代码片段。

 mData.addAll(data);
 mAdapter.notifyDataSetChanged();
 LinearLayoutManager layoutManager = (LinearLayoutManager) this.getLayoutManager();
 int lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition();
 int visibleItemCount = layoutManager.getChildCount();
 int totalItemCount = layoutManager.getItemCount();

我发现RecyclerView第一次加载数据时,所有数据都无法填满屏幕高度,lastVisibleItemPosition和visibleItemCount是错误的。比如我加载了10个item,所有item都可以显示在屏幕上。 totalItemCount 是 10,但 lastVisibleItemPosition 是 1,totalItemCount 是 2。(应该是 9 和 10)。

但是当我刷新 RecyclerView(通过相同的代码重新加载数据。)或加载更多数据时,findLastVisibleItemPosition 是正确的。

当 RecyclerView 第一次加载数据并显示在屏幕上时,我检查 findLastVisibleItemPosition 也是正确的。

所以我的问题是,notifyDataSetChanged 是 aysnc 函数吗?如果是,我可以通过哪个事件获得正确的 findLastVisibleItemPosition?或者有更好的方法来获得它吗?

感谢阅读我蹩脚的英语。

【问题讨论】:

    标签: android android-recyclerview position


    【解决方案1】:

    你可以试试:

    recyclerView.post(new Runnable() {
                @Override
                public void run() {
                    LinearLayoutManager lm = (LinearLayoutManager) recyclerView.getLayoutManager();
                    lm.findLastCompletelyVisibleItemPosition();
                }
            });   
    

    另见: get visible items in recyclerview

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      • 2019-01-09
      相关资源
      最近更新 更多