在 RecyclerView 中多次调用 Click 事件 (xamarin android)
Click event is invoked more than once in RecyclerView (xamarin android)
我想分享我在创建 recycleView 时遇到的这个问题,它有一个按钮可以删除一个项目。以防万一外面有人也浪费了他一整天的时间来弄清楚这个问题。
每当我点击按钮时,它有时会删除两个项目(调用两次)
这是代码(简化)
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
MyView myHolder = holder as MyView;
int IndexPosition = (Cards.Count - 1) - position;
myHolder.tvTitle.Text = Cards[IndexPosition].Title;
myHolder.tvSubTitle.Text = Cards[IndexPosition].SubTitle;
myHolder.tvTime.Text = Cards[IndexPosition].Time;
myHolder.mMainView.Click += (o, e) =>
{
//delete the item, console.write("something")
};
}
为了简单起见,"something" 写了两次..
首先:不要在 OnBindViewHolder
中的点击事件中添加代表
INSTEAD 您必须改用此方法分配您的点击事件:
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
例如
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
View row = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.CardView_proto,parent,false);
TextView Title = row.FindViewById<TextView>(Resource.Id.cardview_textView_main);
Button buttonCheck = row.FindViewById<Button>(Resource.Id.cardview_button_check);
MyView view = new MyView(row) { tvTitle = Title };
buttonCheck.Click += (o,e) =>
{
**//your method here won't be called twice**
};
return view;
};
我想分享我在创建 recycleView 时遇到的这个问题,它有一个按钮可以删除一个项目。以防万一外面有人也浪费了他一整天的时间来弄清楚这个问题。
每当我点击按钮时,它有时会删除两个项目(调用两次)
这是代码(简化)
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
MyView myHolder = holder as MyView;
int IndexPosition = (Cards.Count - 1) - position;
myHolder.tvTitle.Text = Cards[IndexPosition].Title;
myHolder.tvSubTitle.Text = Cards[IndexPosition].SubTitle;
myHolder.tvTime.Text = Cards[IndexPosition].Time;
myHolder.mMainView.Click += (o, e) =>
{
//delete the item, console.write("something")
};
}
为了简单起见,"something" 写了两次..
首先:不要在 OnBindViewHolder
INSTEAD 您必须改用此方法分配您的点击事件:
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
例如
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
View row = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.CardView_proto,parent,false);
TextView Title = row.FindViewById<TextView>(Resource.Id.cardview_textView_main);
Button buttonCheck = row.FindViewById<Button>(Resource.Id.cardview_button_check);
MyView view = new MyView(row) { tvTitle = Title };
buttonCheck.Click += (o,e) =>
{
**//your method here won't be called twice**
};
return view;
};