Я только начал использовать databinding
, теперь я застрял, реализуя прослушиватель щелчков привязки данных в recyclerView
. У меня это работает так:
@NonNull
@Override
public BookViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
ItemBookCoversBinding binding = ItemBookCoversBinding.inflate(LayoutInflater.from(context), parent, false);
final BookViewHolder bookViewHolder = new BookViewHolder(binding);
bookViewHolder.binding.bookDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.deleteCover(bookViewHolder.getAdapterPosition());
}
});
bookViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.changeCover(bookViewHolder.getAdapterPosition());
}
});
return bookViewHolder;
}
, что буквально работает нормально, но я не использую databinding
для clickListener
. Я попытался добавить переменную позицию в свой макет, как это:
<data>
<variable
name="position"
type="int" />
<variable
name="listener"
type="....interfaces.Listener" />
</data>
<ImageView
android:id="@+id/book_cover"
coverImage="@{bookImages.storageRef}"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_green_dark"
android:onClick="@{() -> listener.changeCover(position)}"
android:src="@drawable/placeholder" />
и в onCreateViewHolder
в адаптере это:
bookViewHolder.binding.setVariable(BR.position, bookViewHolder.getAdapterPosition());
или это:
binding.setPosition(bookViewHolder.getAdapterPosition());
onClick
работает как и ожидалось в обоих случаях, но bookViewHolder.getAdapterPosition()
возвращает -1
, NO_POSITION
Чего мне здесь не хватает? Каков наилучший способ реализации databinding
onClickListener
в RecyclerView
?
У меня уже есть кое-что, что работает, но это не databinding
способ.