【发布时间】:2018-05-31 19:05:44
【问题描述】:
我正在使用 xamarin 中的 recyclerview 创建时间线提要,其中包含在不同位置的单个项目中具有多个点击事件(子点击)的项目(如 youtube)。因此在 recyclerview 的情况下实现,我在 onBind 方法的适配器内定义了单击事件。一切正常,但在向上或向下滑动列表然后单击通过获取位于该单击位置的所有项目的上下文来触发多个事件。
假设在应用程序启动时 item2 位于中心(我们将点击的位置),然后我们向上滑动并让 item4 在中心,然后再次向下滑动我们在中心获得 item3,最后单击 item3(中心位置)。我们得到该位置所有项目的点击事件结果。这意味着 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; }
}
}
请建议我解决此问题的解决方案,谢谢。
【问题讨论】:
标签: android visual-studio xamarin android-recyclerview adapter