web-dev-qa-db-ja.com

アダプターから親RecyclerViewへの参照を取得するより良い方法はありますか?

アダプター内、特にRecyclerViewメソッド内から親onBindViewHolderへの参照が必要なユースケースがあります。これまでのところ、私がやっていることは、onCreateViewHolderメソッドでviewGroup parent argのように:

private ViewGroup mParent;

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

そして、RecyclerViewの親onBindViewHolderを次のように参照します。

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

これを行うより良い方法はありますか?多分 RecyclerView.Adapter私が逃したかもしれない方法がありますか?

68
nabir

実際には、アダプターに接続する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....
    }
167
NameSpace

別の方法は、コンストラクタに参照を渡すことです。

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