Я уже проверил этот вопрос Android DataBinding in RecyclerView.ViewHolders with different layoutsAndroid DataBinding в ViewHolder с BaseViewHolder
Но в моем случае, ViewHolders есть супер класс BaseViewHolder. Все ViewHolders имеют одинаковую внешнюю компоновку, например, заголовок и кнопку закрытия, но макет содержимого отличается от вида вида до вида.
Я хочу использовать DataBinding и MVP для обработки этих представлений. Я могу получить Binder для каждого ViewHolder, но каждое привязку имеет другой тип класса. Все они расширяют ViewDataBinding.
Некоторый код:
public ViewHolderA(ListItemABinding binding) extends BaseViewHolder{
super(binding);
... do stuff with the binding
}
public ViewHolderB(ListItemBBinding binding) extends BaseViewHolder {
super(binding);
... do stuff with the binding
}
public BaseViewHolder(ViewDataBinding binding) extends RecyclerView.ViewHolder {
super(binding.getRoot());
//access the header and the button here!!!
}
внутри адаптера:
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int itemType) {
switch (itemType) {
case SmartHomeBase.VIEW_TYPE_A:
ListItemABinding bindingA = DataBindingUtil.inflate(LayoutInflater.from(viewGroup.getContext()), R.layout.list_item_a, viewGroup, false);
return new ViewHolderA(bindingA);
default:
ListItemBBinding bindingB = DataBindingUtil.inflate(LayoutInflater.from(viewGroup.getContext()), R.layout.list_item_b, viewGroup, false);
return new ViewHolderB(bindingB);
}
}
Что я получаю от DataBindingUtil является ListItemABinding и ListItemBBinding, каждая из которых содержит кнопки и заголовок мне нужно в BaseViewHolder. BaseViewHolder просто принимает ViewDataBinding, где я не могу достичь (легкий путь) взглядов, которые мне нужны.
Вариант 1: Я могу использовать findViewById (снова) - но это кажется не очень приятным.
Вариант 2: проверить экземпляр для DataBindings в BaseViewHolder и отличить - кажется, тоже не очень приятно.
Есть ли вариант 3 Я не вижу?
Вам не нужен доступ к 'View's из' 'ViewHolder': все связанные с просмотром вещи выполняются в сгенерированных классах ViewDataBinding – pskink
Что делать, если я хочу загрузить изображение, например ImageLoader.loadImageAsync()? Для этого мне нужен взгляд? – Informatic0re
https://blog.stylingandroid.com/data-binding-part-3/ – pskink