感谢您阅读我的问题,
我已经使用dataBinding在recyclerView中实现了onClick,但是我可以将对象本身发送给click函数,但是我需要项目位置,是否可以在onClick
中获得项目位置?
这是在recyclerView项目中实现点击的方式:
android:onClick="@{ (v) -> model.click(obj) }"
答案 0 :(得分:3)
创建界面
interface ItemClickListener{
void itemClicked(int position)
}
在 XML 中使用 ItemClickListener 和 Integer 并像这样在 onClick()
上调用接口方法
android:onClick="@{()->itemClickListener.itemClicked(position)}"
演示 XML 片段 my_item.xml
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="itemClickListener"
type="ItemClickListener" />
<variable
name="position"
type="Integer"/>
</data>
<LinerLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/offer_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:onClick="@{()->itemClickListener.itemClicked(position)}"
/>
</LinearLayout>
</layout>
在Adapter中设置ItemClickListener和Position
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private ItemClickListener itemClickListener;
public MyAdapter(Context){
itemClickListener = (ItemClickListener)context;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
MyItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()),
R.layout.my_item, parent, false);
return new MyViewHolder(binding);
}
@Override
public void onBindViewHolder(@NonNull OfferViewHolder holder, int position) {
holder.bind(position);
}
class MyViewHolder extends RecyclerView.ViewHolder{
private MyItemBinding binding;
public OfferViewHolder(@NonNull ItemOfferBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
private void bind(int position){
binding.setItemClickListener(itemClickListener); //<----This is important
binding.setPosition(position); //<-- This is important
}
}
}
活动代码
MyActicity extends AppCompatActivity{
MyAdapter adapter = new Adapter(this);
}
答案 1 :(得分:0)
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
holder.hTextview_Score.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
}
在OnBindViewHolder中单击视图,位置是视图的位置
答案 2 :(得分:0)
使用数据绑定时,可以在ViewHolder内部使用一个公开的属性。
只需致电adapterPosition
。
答案 3 :(得分:0)
您可以在视图持有器中使用<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app"></div>
将项目位置传递给ItemView,然后可以将adapterPosition
传递给itemPosition
android:onClick="@{ (v) -> model.click(obj, itemPosition) }"