Android 为什么findLastVisibleItemPosition在RecyclerView首次添加数据时返回1

Android 为什么findLastVisibleItemPosition在RecyclerView首次添加数据时返回1,android,android-recyclerview,position,Android,Android Recyclerview,Position,在我的项目中,我使用带有pulltorefresh的RecyclerView,并在滚动到底部时加载更多数据 mData.addAll(data); mAdapter.notifyDataSetChanged(); LinearLayoutManager layoutManager = (LinearLayoutManager) this.getLayoutManager(); int lastVisibleItemPosition = layoutManager.findLastVisi

在我的项目中,我使用带有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个项目,所有项目都可以显示在屏幕中。totalItemCount是10,但lastVisibleItemPosition是1,totalItemCount是2。(应该是9和10)

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

当RecyclerView首次加载数据并显示在屏幕上时,我检查findLastVisibleItemPosition是否正确

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

感谢您阅读我的蹩脚英语。

您可以尝试:

recyclerView.post(new Runnable() {
            @Override
            public void run() {
                LinearLayoutManager lm = (LinearLayoutManager) recyclerView.getLayoutManager();
                lm.findLastCompletelyVisibleItemPosition();
            }
        });   
另见: 您可以尝试:

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