私はRecycleViewを持っていますが、これはほぼ同じビューを2つ(同じ内容ですが、異なる順序で)持っています。彼らは異なるViewHoldersを持っているので、私は異なるレイアウトをinstatiateすることができますが、残りは同じです。だから私はそれが悪い習慣であるので自分自身を繰り返さないことを望む。異なるビュータイプのRecycleView
class ViewHolder extends RecyclerView.ViewHolder {
PostItemBinding mViewDataBinding;
public ViewHolder(PostItemBinding viewDataBinding) {
super(viewDataBinding.getRoot());
mViewDataBinding = viewDataBinding;
mViewDataBinding.executePendingBindings();
}
public PostItemBinding getBinding() {
return mViewDataBinding;
}
}
// ------------------------------------------------------------------------------------
class ViewHolderComments extends RecyclerView.ViewHolder {
PostWithCommentItemBinding mViewDataBinding;
public ViewHolderComments(PostWithCommentItemBinding viewDataBinding) {
super(viewDataBinding.getRoot());
mViewDataBinding = viewDataBinding;
mViewDataBinding.executePendingBindings();
}
public PostWithCommentItemBinding getBinding() {
return mViewDataBinding;
}
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder base, final int pos) {
if (base instanceof ViewHolder) {
position = hideHeader ? pos : pos - 1;
setUpPostView(base, position);
} else if (base instanceof ViewHolderComments) {
position = hideHeader ? pos : pos - 1;
setUpCommentsView(base, position);
} else {
setUpHeader(base);
}
}
最初のビューのセットアップ:
protected void setUpPostView(RecyclerView.ViewHolder base, final int position) {
final ViewHolder holder = (ViewHolder) base;
..... the same code
}
2番目のビューの設定:
protected void setUpCommentsView(RecyclerView.ViewHolder base, final int position) {
final ViewHolderComments holder = (ViewHolderComments) base;
..... the same code
}
私はViewHolderのすべてが同じであるキャストの最初の行がなければここに私のコードです。どのように私はそれを最適化/改善することができますか?抽象クラスの使用?
あなたの必要に応じて、https://github.com/afollestad/sectioned-recyclerview –
のようなものを使用すると、継承のようなOOPの基本を使用することで利益を得ることができます。fxクラス 'ViewHolderBase'を' setup(int position) 'でそれを継承する – Selvin
ViewHolderとViewHolderCommentsの違いは何ですか? –