Android findViewHolderForAdapterPostion返回null
我想使用以下代码获取我的RecyclerView的第一个完全可见项的Viewholder:Android findViewHolderForAdapterPostion返回null,android,android-recyclerview,material-design,Android,Android Recyclerview,Material Design,我想使用以下代码获取我的RecyclerView的第一个完全可见项的Viewholder: myRecyclerView = (RecyclerView) findViewById(R.id.recycler_demo); myRecyclerView.setHasFixedSize(true); myLayoutManager = new LinearLayoutManager(getApplicationContext()) myRecyclerView.setLayoutManager(m
myRecyclerView = (RecyclerView) findViewById(R.id.recycler_demo);
myRecyclerView.setHasFixedSize(true);
myLayoutManager = new LinearLayoutManager(getApplicationContext())
myRecyclerView.setLayoutManager(myLayoutManager);
LinearCardListAdapter myAdapter = new LinearCardListAdapter(getApplicationContext(), initilizeData());
myRecyclerView.setAdapter(myAdapter);
ImageView iv = new ImageView(this);
int adapterPosition = myLayoutManager.findFirstCompletelyVisibleItemPosition();
RecyclerView.ViewHolder visibleViewHolder = myRecyclerView.findViewHolderForAdapterPosition(adapterPosition);
在这种情况下,visibleViewHolder
为空
我还尝试了findViewHolderForAdapterPosition
,数字从0到7(我的数据集是从0到7,有8个数据),结果还是空的
有什么解决方案吗?您可以这样做:
myRecyclerView.postDelayed(new Runnable()
{
@Override
public void run()
{
if(myRecyclerView.findViewHolderForAdapterPosition(0)!=null )
{
RecyclerView.ViewHolder visibleViewHolder=myRecyclerView.findViewHolderForAdapterPosition(0);
}
}
},50);
由于在此之前调用了
notifyDataSetChanged()
,因此会得到null
,因为布局尚未就绪。请注意,当适配器内容更改时,在下一次布局计算之前,不会更新ViewHolder位置。如果有挂起的适配器更新,此方法的返回值可能与适配器内容不匹配。您可以使用#getAdapterPosition()获取ViewHolder的当前适配器位置@Amy HinotifyDataSetChanged()
的可能重复项不在我的代码中,我在问题中忘记删除它,但它不在我的代码中。所以这不是问题所在