【发布时间】:2020-04-05 00:40:12
【问题描述】:
我刚开始使用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
我在这里缺少什么?
在RecyclerView 中实现databinding onClickListener 的最佳方法是什么?
我已经有了一些可行的方法,但不是databinding 方式。
【问题讨论】:
标签: android android-recyclerview fragment onclicklistener