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 中,更新 V​​iewHolder 中的 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 更清晰,并且还可以防止您的点击处理程序在您滚动时不断设置和拆除。