gpt4 book ai didi

android - recyclerview 的 findFirstVisibleItemPosition() 总是返回 -1

转载 作者:太空狗 更新时间:2023-10-29 14:00:59 24 4
gpt4 key购买 nike

这是我想在方向更改和 Activity 恢复时保留 recyclerview 滚动位置的代码。问题出在我的日志中,我总是得到-1。我哪里错了?

void resetViews() {
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
RecyclerView.LayoutManager lm = recyclerView.getLayoutManager();
if (lm != null && lm instanceof LinearLayoutManager) {
currPosition = ((LinearLayoutManager)lm).findFirstVisibleItemPosition();
Log.i("saz","curr pos : " + currPosition);
}
int count = lm.getChildCount();
if (currPosition != RecyclerView.NO_POSITION && currPosition < count){
lm.scrollToPosition(currPosition);
}
}

最佳答案

一切都非常简单,因为您重载了适配器,LayoutManager 没有时间在其内部构建元素,这意味着此时所有元素在屏幕上都不可见。如果您尝试调用 recyclerView.getChildCount(),您将得到 0

尝试这样的事情:

recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
new Handler().postDelayed(new Runnable(){
public void run() {
RecyclerView.LayoutManager lm = recyclerView.getLayoutManager();
if (lm != null && lm instanceof LinearLayoutManager) {
currPosition = ((LinearLayoutManager)lm).findFirstVisibleItemPosition();
Log.i("saz","curr pos : " + currPosition);
}
int count = lm.getChildCount();
if (currPosition != RecyclerView.NO_POSITION && currPosition < count){
lm.scrollToPosition(currPosition);
}
}
}, 500);

关于android - recyclerview 的 findFirstVisibleItemPosition() 总是返回 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35540610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com