RecyclerView点击事件

时间:2016-03-01 14:18:03

标签: xamarin xamarin.android android-recyclerview

我创建了一个RecyclerView适配器,我试图在单击一行时启动一个活动:

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);
    }
}

当我点击第一行时,它会带我参加我想要的活动。如果我向下滚动以便第一行反弹,然后再次滚动回到顶部,然后单击第一行,然后我的Click事件触发两次。一次为绑定的第一行,然后再为我滚动时绑定的行。

您是否需要处理取消注册点击事件的事件?

1 个答案:

答案 0 :(得分:4)

我认为标准模式是在ViewHolder的构造函数中设置clickhandler。然后在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中来保持适配器更清洁,并且还可以防止点击处理程序在滚动时不断设置和拆除。