gpt4 book ai didi

Android recyclerView findViewHolderForAdapterPosition 返回 null

转载 作者:IT王子 更新时间:2023-10-28 23:34:51 55 4
gpt4 key购买 nike

我想以编程方式单击 recyclerView 中的一个项目,我发现 a way这样做:

recyclerView.findViewHolderForAdapterPosition(0).itemView.performClick();

但这对我不起作用,findViewHolderForAdapterPosition 只返回 null。

我是否遗漏了代码中的某些内容?

HistoryListAdapter:

public class HistoryListAdapter extends RecyclerView.Adapter<HistoryListAdapter.ViewHolder> {
private static ArrayList<RecordItem> recordItems;
private static FragmentActivity activity;
private static RecordList recordList;

public HistoryListAdapter(ArrayList<RecordItem> recordItems, FragmentActivity FA, RecordList FRL) {
this.recordItems = recordItems;
this.activity = FA;
this.recordList = FRL;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// create a new view
View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.recorditem, parent, false);
return new ViewHolder(itemLayoutView);
}

@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int position) {
// TextView setText ...
}

// Return the size of the itemsData (invoked by the layout manager)
@Override
public int getItemCount() {
return recordItems.size();
}

// inner class to hold a reference to each item of RecyclerView
public static class ViewHolder extends RecyclerView.ViewHolder{
public TextView result, datetime;

public ViewHolder(View itemLayoutView) {
super(itemLayoutView);
itemLayoutView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (activity != null) {
// do something...
}
}
});
result = (TextView) itemLayoutView.findViewById(R.id.result);
heartrate = (TextView) itemLayoutView.findViewById(R.id.heartrate);
datetime = (TextView) itemLayoutView.findViewById(R.id.datetime);
}
}
}

记录列表:

RecyclerView listView = (RecyclerView) layoutView.findViewById(R.id.listView);
HistoryListAdapter listadapter = new HistoryListAdapter(itemsToShow, getActivity(), RecordList.this);
listView.swapAdapter(listadapter, false);
listView.findViewHolderForAdapterPosition(0).itemView.performClick();

我省略了一些代码,但应该不会影响我代码的整体结构。

最佳答案

根据official documentation :

if notifyDataSetChanged() has been called but the new layout has not been calculated yet, this method will return null since the new positions of views are unknown until the layout is calculated.

使用 findViewHolderForAdapterPosition() 是不安全的。

当您在 listView.swapAdapter(listadapter, false); 之后调用此方法时,您将始终得到一个 null 作为结果,因为 notifyDataSetChanged() 将被调用。

关于Android recyclerView findViewHolderForAdapterPosition 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32836844/

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