【发布时间】:2021-10-24 18:07:55
【问题描述】:
我有一个非常简单的RecyclerView 和一个ViewHolder 如下
ViewHolder
private class SENT_VH : RecyclerView.ViewHolder, View.IOnClickListener
{
public SENT_VH(View itemView) : base(itemView)
{
MyText = itemView.FindViewById<TextView>(Resource.Id.sent_msg_time);
DeleteButton = itemView.FindViewById<TextView>(Resource.Id.sent_msg_person_name);
itemView.SetOnClickListener(this);
}
public TextView DeleteButton { get; set; }
public TextView MyText { get; set; }
public void OnClick(View v)
{
// ViewHolder Item clicked
}
}
当我单击该项目时,这可以完美运行,但我正在尝试在 DeleteButton 上实现 OnClickListner,如下所示
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
try
{
SENT_VH viewHolder = holder as SENT_VH;
viewHolder.MyText.Text = itemList[position].userText;
viewHolder.DeleteButton.SetOnClickListener(new DeleteOnClickListner(itemList[position].id, context, position));
}
catch (Exception X)
{
//LOG.Error >> ERROR
}
}
我的DeleteOnClickListner终于是
class DeleteOnClickListner : Java.Lang.Object, View.IOnClickListener
{
private decimal id;
private Context context;
private int pos;
public DeleteOnClickListner(decimal id, Context context, int pos)
{
this.id = id;
this.context = context;
this.pos = pos;
}
public void OnClick(View v)
{
Android.Util.Log.Debug("ADAPTER", "Delete id: " + id);
((MainActivity)context).deleteConfirmation(id, pos);
}
}
在 deleteConfirmation 方法的 MainActivity 中,我只是想获取位置和 ID,如下所示
public void deleteConfirmation(decimal id, int pos)
{
EVENT_LOGGER(TAG, "Pos:" + pos + ", id: " + id);
}
问题是我总是得到相同的id 和position 作为我点击任何ViewHolder 的第一个DeleteButton,它永远不会改变。
例如,如果我首先单击项目位置 10 处的 DeleteButton,则无论我接下来单击哪个 DeleteButton,它都会继续发送位置 10。
你们知道发生了什么吗
编辑:
按照@tyczj 的建议,我尝试通过在我的 ViewHolder 中添加以下内容来移动我的 ViewHolder 中的 OnclickListner
public void SetMyView(decimal id, Context context, int pos)
{
DeleteButton.SetOnClickListener(new DeleteOnClickListner(id, context, pos));
}
并在我的OnBindViewHolder 中使用 SetMyView 如下
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
try
{
SENT_VH viewHolder = holder as SENT_VH;
viewHolder.SetMyView(position, context); //This line here
viewHolder.MyText.Text = itemList[position].userText;
viewHolder.DeleteButton.SetOnClickListener(new DeleteOnClickListner(itemList[position].id, context, position));
}
No Difference 完全相同的结果 捕获(异常 X) { //LOG.Error >> 错误 } }
EDIT 2 - Working Solution
我更新了 VH 以添加以下内容
DeleteButton.SetOnClickListener(new DeleteOnClickListner(AdapterPosition));
【问题讨论】:
-
这是在 Xamarin 中吗?
-
是的,但是你可以给我java解决方案:)
标签: android android-recyclerview onclicklistener