有没有更好的方法从适配器获取对父级RecyclerView的引用?

nab*_*bir 72 android android-adapter android-recyclerview

我有一个用例,我需要RecyclerView从适配器内部引用父,特别是在onBindViewHolder方法内.到目前为止,我正在做的是将它分配给onCreateViewHolder传递viewGroup parentarg 的方法中的私有类成员,如下所示:

private ViewGroup mParent;

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    // inflater logic.
    mParent = parent;
}
Run Code Online (Sandbox Code Playgroud)

并引用父RecyclerViewonBindViewHolder这样的:

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    // binder logic.
    ((RecyclerView)mParent).blahBlahBlah();
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?也许RecyclerView.Adapter有一种我可能错过的方式?

Nam*_*ace 176

实际上有一个特定的方法,使用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....
    }
Run Code Online (Sandbox Code Playgroud)

  • @UnTraDe 是的。上面的代码会覆盖之前的 RecyclerView 实例。一个解决方案是维护一个附加的 RecyclerView 实例列表并删除 onDetachedFromRecyclerView(..) 中的实例。如果可能,最好避免这种情况,只需为每个 RecyclerView 实例创建一个适配器实例。 (3认同)
  • 我怎么在文档中错过了这个!谢谢,这正是我要找的! (2认同)
  • 文档说:"请记住,多个RecyclerViews可能会观察到相同的适配器." https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html#onAttachedToRecyclerView(android.support.v7.widget.RecyclerView)纠正我,如果我错了,但不会如果将适配器分配给多个RecyclerView,会产生问题吗? (2认同)