new*_*ewt 1 android android-layout
我正在尝试做这样的事情:
RecyclerAdapter recyclerAdapter;
LinearLayoutManager recyclerManager;
//set items....
recyclerAdapter.notifyDataSetChanged();
int itemPosition = recyclerManager.findFirstVisibleItemPosition(); //returns -1
Run Code Online (Sandbox Code Playgroud)
但屏幕上显然有新项目。从文档中,我看到了这一点:
返回第一个可见视图的适配器位置。此位置不包括在最后一次布局传递之后调度的适配器更改。
所以我想布局通道还没有完成。但是我不知道如何确保在调用此方法之前完成。我什至试过这个:
if (!isInLayout()) {
recyclerManager.requestLayout();
}
Run Code Online (Sandbox Code Playgroud)
在调用该方法之前,但这没有帮助。谢谢你的帮助。
您是正确的,问题在于尚未发生布局传递,这就是您获得POSITION_NONE.
简单地做一个像这样的检查是if (!isInLayout())行不通的,因为你会做一次检查,它会返回 false,这就是它的结束。
在这种情况下,您真正想做的是使用 aViewTreeObserver来侦听布局事件。
例如:
recyclerView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int itemPosition = recyclerManager.findFirstVisibleItemPosition();
}
});
Run Code Online (Sandbox Code Playgroud)
findFirstVisibleItemPosition()顺便说一句,如果您只在第一次填充 RecyclerView 时使用,您可能根本不需要它。第一个可见项将始终为 0,除非您也在做其他事情来滚动 RecyclerView。
| 归档时间: |
|
| 查看次数: |
3830 次 |
| 最近记录: |