私は、複数の異なるレイアウトファイルで共通のビューモデルを持つRecyclerViewでデータバインディングを使用しています。私は生成されたバインディングファイルを持つことができる方法は共通のインターフェイスを実装して、次の(動作しているが醜い)コードを単純化するか? ActionAdapter内インターフェイスと生成されたバインディングファイル
R.layout.list_item_cat
R.layout.list_item_dog
R.layout.list_item_mouse
:
@Override
public ActionAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
@LayoutRes int layoutToInflate;
switch (viewType) {
case 0:
layoutToInflate = R.layout.list_item_cat;
break;
case 1:
layoutToInflate = R.layout.list_item_dog;
break;
case 2:
layoutToInflate = R.layout.list_item_mouse;
break;
}
return new ViewHolder(DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), layoutToInflate, parent, false));
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
if (holder.mBinding instanceof ListItemCatBinding) {
((ListItemCatBinding) holder.mBinding).setViewModel(mViewModelList.get(position));
}
else if (holder.mBinding instanceof ListItemDogBinding) {
((ListItemDogBinding) holder.mBinding).setViewModel(mViewModelList.get(position));
}
else if (holder.mBinding instanceof ListItemMouseBinding) {
((ListItemMouseBinding) holder.mBinding).setViewModel(mViewModelList.get(position));
}
私は上記の例は悪くないですけど、操作できるようにするには便利だろうのようなレイアウトファイルを考えると
一般的なことを共有するBindingファイルのセットです。特に複雑な状況では、型を常にチェックしてキャストする必要はありません。この記事
'executePendingBindings()'も同様に呼び出す価値があります。 – tynn
が合意した。私はそれを追加するために編集します。ありがとう! –
素晴らしいもの!非常に便利で関連性の高い記事もあります。 – Dave