如何从父片段访问 RecyclerView 中的项目?
How to ccess items inside RecyclerView from parent fragment?
我正在尝试将 onClickListener() 方法附加到 Recycler 视图内的项目。我知道我可以通过 RecyclerAdapter 轻松实现它,但这样做的目的是显示一个自定义对话框,其中包含父片段包含的一些信息,有一些方法可以传递数据,但我认为最好附加而不是片段中的监听器,这样我就可以直接访问数据。
我已尝试按照从适配器访问片段的方式进行访问,并进行了一些修改:
myRecyclerAdapter.myViewHolder.reportContainer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(),"Touch",Toast.LENGTH_SHORT).show();
}
});
但是很明显,当我尝试使用它时,myViewHolder 对象还没有创建,所以我得到了 Java NullPointerException (F..$&@#^$&^%, don't误会我,我喜欢它)。
所以,我需要一些帮助来做我想做的事情,或者尝试一些其他好的想法,警告:我真的在努力避免传递数据,除了可能使用 ViewModel(不知道如果可以的话),因为要传递的字段很多
这是根本不正确的。这里的问题是,RecylerView 中有多个 ViewHolder。你想把它贴在哪一个上?将有 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.
}
}
我正在尝试将 onClickListener() 方法附加到 Recycler 视图内的项目。我知道我可以通过 RecyclerAdapter 轻松实现它,但这样做的目的是显示一个自定义对话框,其中包含父片段包含的一些信息,有一些方法可以传递数据,但我认为最好附加而不是片段中的监听器,这样我就可以直接访问数据。
我已尝试按照从适配器访问片段的方式进行访问,并进行了一些修改:
myRecyclerAdapter.myViewHolder.reportContainer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(),"Touch",Toast.LENGTH_SHORT).show();
}
});
但是很明显,当我尝试使用它时,myViewHolder 对象还没有创建,所以我得到了 Java NullPointerException (F..$&@#^$&^%, don't误会我,我喜欢它)。
所以,我需要一些帮助来做我想做的事情,或者尝试一些其他好的想法,警告:我真的在努力避免传递数据,除了可能使用 ViewModel(不知道如果可以的话),因为要传递的字段很多
这是根本不正确的。这里的问题是,RecylerView 中有多个 ViewHolder。你想把它贴在哪一个上?将有 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.
}
}