我一直在寻找一种方便的方法来外包RecyclerView.Adapter
中的一些数据绑定代码。我正在看下面的教程:https://www.journaldev.com/12372/android-recyclerview-example,它在2-3个不同的ViewHolders
上似乎工作得很好。但是,一旦不同ViewHolders的数量增加(比方说10个或更多),onBindViewHolder
方法的大小就会爆炸式增长。因此,我正在寻找一种从适配器中外包此数据绑定部分的方法。因为我不想重复发明轮子,所以我在寻找一个可能已经存在的解决方案。
发布于 2019-07-31 04:18:39
如果这个问题没有现有的解决方案,我想出了以下想法:
首先创建ViewHolder
的子类并添加另一个抽象方法bindData
abstract class DataBindingViewHolder<T> extends RecyclerView.ViewHolder {
DataBindingViewHolder(@NonNull View itemView) {
super(itemView);
}
abstract void bindData(T t);
}
其次,根据需要创建任意多个此类的子类。例如这两个:
class ItemViewHolder extends DataBindingViewHolder<Item> {
TextView itemNameTextView;
TextView itemDescriptionTextView;
ItemViewHolder(@NonNull View itemView) {
super(itemView);
// TODO init fields here
}
@Override
void bindData(Item item) {
String itemName = item.getName();
String itemDescription = item.getDescription();
itemNameTextView.setText(itemName);
itemDescriptionTextView.setText(itemDescription);
}
}
class ExtendedItemViewHolder extends DataBindingViewHolder<Item> {
TextView itemNameTextView;
TextView itemDescriptionTextView;
TextView itemPriceTextView;
ImageView itemPreviewImageView;
ExtendedItemViewHolder(@NonNull View itemView) {
super(itemView);
// TODO init fields here
}
@Override
void bindData(Item item) {
String itemName = item.getName();
String itemDescription = item.getDescription();
String itemPrice = item.getPrice();
Bitmap itemPreviewImage = item.getImage();
itemNameTextView.setText(itemName);
itemDescriptionTextView.setText(itemDescription);
itemPriceTextView.setText(itemPrice);
itemPreviewImageView.setImageBitmap(itemPreviewImage);
}
}
最后,onBindViewHolder
方法现在看起来就像这样:
@Override
public void onBindViewHolder(@NonNull DataBindingViewHolder<Item> viewHolder, int i) {
Item item = itemList.get(i);
viewHolder.bindData(item);
}
请记住:您仍然需要覆盖getItemViewType
方法,这取决于您需要提供的数据。
https://stackoverflow.com/questions/57279437
复制相似问题