我的活动是显示一个RecyclerView和一个LinearLayoutManager。我想得到列表中的第一项(View)。根据this post's accepted answer,我可以调用LinearLayoutManager.findViewByPosition()方法,但我得到的是null。为什么?
RecyclerView list = findViewById(R.id.list);
LinearLayoutManager llm = new LinearLayoutManager(this);
list.setLayoutManager(llm);
MyAdapter adapter = new MyAdapter();
list.setAdapter(adapter);
View firstViewItem = llm.findViewByPosition(0); // <-- nulladapter包含项,它不是空的。
发布于 2017-09-20 16:02:31
这是因为由RecyclerView组成的Adapter是异步的。当适配器完成填充RecyclerView以确保findViewByPosition返回给您时,您可以启动一个事件。
检测RecyclerView何时完成所有可见项的填充有点困难,因为我们应该计算每个项的大小(宽度和高度),并定义在当前设备显示中可以输入多少项。
但是,如果您只需要访问第一个填充的项,那么就可以在Adapter的onBindViewHolder方法中触发您的事件,显然可以插入所需的控件以避免为每个添加的项触发事件。
发布于 2019-12-29 22:43:48
一个有用的函数是doOnPreDraw --您应该在RecyclerView上调用它并将代码放在那里。
rv.doOnPreDraw {
// now it will work...
val view = llm.findViewByPosition(0)
}发布于 2017-09-20 16:03:06
尝尝这个。
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
View firstViewItem = llm.findViewByPosition(0);
}
}, 500);https://stackoverflow.com/questions/46326681
复制相似问题