有没有更好的方法从适配器获取对父 RecyclerView 的引用?
Posted
技术标签:
【中文标题】有没有更好的方法从适配器获取对父 RecyclerView 的引用?【英文标题】:Is there a better way of getting a reference to the parent RecyclerView from the adapter? 【发布时间】:2015-09-23 18:11:46 【问题描述】:我有一个用例,我需要从适配器内部引用父 RecyclerView
,特别是在 onBindViewHolder
方法内部。到目前为止,我正在做的是将其分配给 onCreateViewHolder
方法中的私有类成员,该方法沿 viewGroup parent
arg 传递,如下所示:
private ViewGroup mParent;
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
// inflater logic.
mParent = parent;
并像这样在onBindViewHolder
中引用父级RecyclerView
:
@Override
public void onBindViewHolder(ViewHolder holder, int position)
// binder logic.
((RecyclerView)mParent).blahBlahBlah();
有没有更好的方法来做到这一点?也许RecyclerView.Adapter
有我可能错过的方式?
【问题讨论】:
【参考方案1】:实际上有一个特定的方法可以使用附加到适配器的RecyclerView
进行回调。只需覆盖 onAttachedToRecylerView(RecyclerView recyclerView)
方法即可。
public class Adapter_RV extends RecyclerView.Adapter<RecyclerView.ViewHolder>
RecyclerView mRecyclerView;
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView)
super.onAttachedToRecyclerView(recyclerView);
mRecyclerView = recyclerView;
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
return null;
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position)
mRecyclerView....
【讨论】:
我怎么在文档中错过了这个!谢谢,这正是我想要的! 文档说:“请记住,多个 RecyclerViews 可能会观察到同一个适配器。” developer.android.com/reference/android/support/v7/widget/…如果我错了,请纠正我,但如果您将适配器分配给多个 RecyclerView 会不会产生问题? @UnTraDe 是的。上面的代码会覆盖之前的 RecyclerView 实例。一种解决方案是维护附加的 RecyclerView 实例列表并删除 onDetachedFromRecyclerView(..) 中的实例。如果可能,最好避免这种情况,只为每个 RecyclerView 实例创建一个适配器实例。 值得第 200 个赞!【参考方案2】:另一种方法是在构造函数中传递引用,例如
public final class MyAdapter extends RecyclerView.Adapper
private final recyclerView;
public MyAdapter(@NonNull RecyclerView recyclerView)
this.recyclerView = recyclerView;
...
@Override
public void onBindViewHolder(ViewHolder holder, int position)
...
【讨论】:
我不推荐,您通常会传递上下文、项目列表,通过回收站视图也会变得热闹以上是关于有没有更好的方法从适配器获取对父 RecyclerView 的引用?的主要内容,如果未能解决你的问题,请参考以下文章
从 Cloud Firestore 检索时,Recycler View 未加载数据
onClickListener 在 Recycler Adapter 类中不起作用