我对 ViewHolder 感到困惑。我刚刚开始将我所有的 ArrayAdapters 和 ListView 转换为带有适配器和持有人的 RecyclerView。转换时,我陷入了设置点击侦听器的方式。
基本上,在过去,我会获取位置,在位置pos检索项目,然后根据我的 ArrayList 项目中的数据执行项目的布局。
@SuppressLint("ClickableViewAccessibility")
@Override
public View getView(int position, View view, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View rowView = inflater.inflate(R.layout.list_items, null, true);
Data currentData = (Data) getItem(position);
myTextView.setText(currentData.title);
myTextView.setOnClickListener(v->actionThatDependsOnPositionAndOrData());
}
所以在我的 ClickListener 中,我会有一些取决于位置的东西,以及某种更新 ArrayList 的回调或类似的东西。
现在,似乎我无法再检索该位置了。
@Override
public <T extends DownloadableData> void bindData(T data) {
super.bindData(data);
myTextView.setOnClickListener(v->actionThat????)
}
那么如何指定位置呢?
因为现在,我在 clickListener 的 AsyncTask 中找到的唯一方法是调用具有 RecyclerView 的 Fragment 并执行此操作
public void myCallback(Data data, String newTitle){
int index=allData.indexOf(data);
performModificationOfData(data); //like data.title=newTitle;
allData.set(index, data);
adapter.notifyDataSetChanged(); //not even sure this is needed..
}
没有更聪明的方法吗?