首页 文章

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

提问于
浏览
52

我有一个用例,我需要从适配器内部引用父 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 有一种我可能错过的方式?

3 回答

  • 1

    实际上有一个特定的方法,使用附加到适配器的RecyclerView进行回调 . 只需覆盖onAttachedToRecylerView()方法即可 .

    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....
        }
    
  • 1

    可能你想在viewHolder中创建一个接口并传递给父接口并在那里实现它 .

  • 137

    另一种方法是在构造函数中传递引用,例如

    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) {
            ...
        }
    }
    

相关问题