Я создаю ленту временной шкалы с использованием recyclerview в xamarin, которая содержит элемент, имеющий несколько событий щелчка (дочерний щелчок) в одном элементе в другой позиции (например, YouTube).так как это реализовано в случае повторного просмотра, я определил событие click внутри адаптера в методе onBind.Все работает нормально, но после прокрутки списка вверх или вниз, а затем нажмите кнопку запуска нескольких событий, получив контекст всех тех элементов, которые были в этой позиции нажатия.
Предположим, при запуске приложения item2 находился впо центру (где мы будем щелкать), затем проводим пальцем вверх и получаем item4 в центре, а затем снова проводим пальцем вниз, получая item3 в центре, наконец щелкните item3 (центральная позиция).и мы получаем результат события click для всех элементов, которые были в этой позиции.это означает, что событие щелчка item2, item3 и item4 запускается параллельно.
Ниже приведен код myadapter-
public class RecyclerAdapter : RecyclerView.Adapter
{
private List<Article> mArticle;
private Context mContext;
public RecyclerAdapter(List<Article> articles, Context context)
{
mArticle = articles;
mContext = context;
}
public class MyView : RecyclerView.ViewHolder
{
public View mMainView { get; set; }
public CircleImageView mauthor { get; set; }
public ImageView mthumb { get; set; }
public TextView mname { get; set; }
public TextView title { get; set; }
public CardView post_card { get; set; }
public MyView(View view) : base(view)
{
mMainView = view;
}
}
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
View row = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.post_card, parent, false);
CircleImageView mauthorimg = row.FindViewById<CircleImageView>(Resource.Id.post_card_profile);
ImageView mthumbimg = row.FindViewById<ImageView>(Resource.Id.thumbimg);
TextView mauthorname = row.FindViewById<TextView>(Resource.Id.post_card_author_name);
TextView articletitle = row.FindViewById<TextView>(Resource.Id.post_title);
CardView mcard = row.FindViewById<CardView>(Resource.Id.post_card);
MyView view = new MyView(row)
{
mauthor = mauthorimg,
mthumb = mthumbimg,
mname = mauthorname,
title = articletitle,
post_card = mcard
};
return view;
}
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
MyView myholder = holder as MyView;
myholder.title.Text = mArticle[position].title;
if(mArticle[position].thumbimg !=null && mArticle[position].thumbimg != "")
{
byte[] thumbimage = Convert.FromBase64String(mArticle[position].thumbimg);
myholder.mthumb.SetImageBitmap(BitmapFactory.DecodeByteArray(thumbimage, 0, thumbimage.Length));
}
else
{
myholder.mthumb.SetImageResource(Resource.Drawable.skull);
}
if (mArticle[position].author.profileimg != null && mArticle[position].author.profileimg != "")
{
byte[] profileimage = Convert.FromBase64String(mArticle[position].author.profileimg);
myholder.mauthor.SetImageBitmap(BitmapFactory.DecodeByteArray(profileimage, 0, profileimage.Length));
}
else
{
myholder.mauthor.SetImageResource(Resource.Drawable.profile);
}
myholder.mname.Text = mArticle[position].author.name+" "+ mArticle[position].category+" "+ mArticle[position].date;
myholder.mauthor.Click += (s, e) => { OpenArticle(mArticle[position]._id); };
myholder.mMainView.Click += (s, e) => {
OpenArticle(mArticle[position]._id);
};
myholder.title.Click += (s, e) => {
OpenArticle(mArticle[position]._id);
};
myholder.mauthor.Click += (s, e) => {
if (mArticle[position].author._id!="" && mArticle[position].author._id!=null)
{
Intent intent = new Intent(mContext, typeof(Profile_Any_Activity));
intent.PutExtra("_id", mArticle[position].author._id);
mContext.StartActivity(intent);
}
};
}
private void OpenArticle(string id)
{
Intent intent = new Intent(mContext, typeof(Article_post));
intent.PutExtra("_id", id);
mContext.StartActivity(intent);
}
public override int ItemCount
{
get { return mArticle.Count; }
}
}
Пожалуйста, предложите мне решение, чтобы это исправить, спасибо.