RecyclerView 点击事件
RecyclerView Click event
我已经创建了一个 RecyclerView 适配器,我正在尝试在单击某行时启动 activity:
public override OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
MyViewHolder viewHolder = (MyViewHolder)holder;
viewHolder.MyView.Click += (sender, e) =>
{
var context = viewHolder.MyView.Context;
var intent = new Intent(context, typeof(DetailActivity));
context.StartActivity(intent);
}
}
当我单击第一行时,它会将我带到我想要的 activity。如果我向下滚动以使第一行反弹,然后再次滚动回到顶部,然后单击第一行,那么我的 Click 事件将触发两次。一次用于绑定的第一行,然后一次用于滚动时绑定的行。
是否有需要处理的事件才能注销点击事件?
我相信标准模式是在 ViewHolder 的构造函数中设置您的点击处理程序。然后在 OnBindViewHolder 中,更新 ViewHolder 中的 Views/Data。
类似这样的东西(不是编译代码):
适配器:
public override OnBindViewHolder()
{
MyViewHolder viewHolder = (MyViewHolder)holder;
viewHolder.SetData(whatever data you care about);
}
MyViewHolder:
public MyViewHolder(View view) : base(view)
{
MainView = view;
MainView.Click += (sender, e) =>
{
var context = MainView.Context;
var intent = new Intent(context, typeof(DetailActivity));
context.StartActivity(intent);
}
}
这样做可以通过将业务逻辑放入 ViewHolder 来保持 Adapter 更清晰,并且还可以防止您的点击处理程序在您滚动时不断设置和拆除。
我已经创建了一个 RecyclerView 适配器,我正在尝试在单击某行时启动 activity:
public override OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
MyViewHolder viewHolder = (MyViewHolder)holder;
viewHolder.MyView.Click += (sender, e) =>
{
var context = viewHolder.MyView.Context;
var intent = new Intent(context, typeof(DetailActivity));
context.StartActivity(intent);
}
}
当我单击第一行时,它会将我带到我想要的 activity。如果我向下滚动以使第一行反弹,然后再次滚动回到顶部,然后单击第一行,那么我的 Click 事件将触发两次。一次用于绑定的第一行,然后一次用于滚动时绑定的行。
是否有需要处理的事件才能注销点击事件?
我相信标准模式是在 ViewHolder 的构造函数中设置您的点击处理程序。然后在 OnBindViewHolder 中,更新 ViewHolder 中的 Views/Data。
类似这样的东西(不是编译代码):
适配器:
public override OnBindViewHolder()
{
MyViewHolder viewHolder = (MyViewHolder)holder;
viewHolder.SetData(whatever data you care about);
}
MyViewHolder:
public MyViewHolder(View view) : base(view)
{
MainView = view;
MainView.Click += (sender, e) =>
{
var context = MainView.Context;
var intent = new Intent(context, typeof(DetailActivity));
context.StartActivity(intent);
}
}
这样做可以通过将业务逻辑放入 ViewHolder 来保持 Adapter 更清晰,并且还可以防止您的点击处理程序在您滚动时不断设置和拆除。