我正在尝试将onClickListener()方法附加到Recycler视图内的项目。我知道我可以通过RecyclerAdapter轻松地做到这一点,但是这样做的目的是显示一个自定义对话框,其中包含父片段包含的一些信息,有一些传递数据的方法,但是我认为最好附上而不是片段的侦听器,这样我就可以直接访问数据。
我尝试通过一些修改从片段中访问它的方式:
while
但是显然,在我尝试使用它时尚未创建myViewHolder对象,因此我得到了Java NullPointerException(F .. $&@#^ $&^%,请不要误解我,我喜欢它)。
因此,我需要一些帮助来完成我要尝试的操作,或者需要尝试一些其他好主意,以警告:我真的在尝试避免传递数据,除非使用ViewModel(不知道我是否可以),因为要传递的字段很多
答案 0 :(得分:1)
这从根本上是不正确的。这里的问题是,RecylerView中有多个ViewHolders。您要附加哪一个?项目数量为n,并非所有项目都可以同时渲染。
使用回调函数,而不是更新 ViewHolder。
class MyAdapter extends RecyclerView.Adapter {
MyAdapterCallback callback = null;
....
@Override
public void onBindViewHolder(holder: ViewHolder, position: Int) {
holder.reportContainer.setOnClickListener { // You can set this in OnCreateViewHolder as well.
if (callback != null) {
callback.onClick();
}
}
}
}
interface MyAdapterCallback {
void onClick()
}
从您的片段开始,
myAdapter.callback = new MyAdapterCallback() {
@Override
public void onClick() {
// Access your fragment variables here.
}
}