Android 在recyclerview中隐藏/显示按钮

Android 在recyclerview中隐藏/显示按钮,android,android-recyclerview,xamarin.android,Android,Android Recyclerview,Xamarin.android,我想在单击的回收器项目中的回收器视图中显示和隐藏一些按钮。例如,我有一个recyclerw视图,其中有两个项目如下 单击第一项时,应显示编辑和删除按钮。我的适配器代码如下: using Android.Support.V7.Widget; using Android.Views; using Android.Widget; using System; using System.Collections.Generic; namespace RecyclerViewTest { inter

我想在单击的回收器项目中的回收器视图中显示和隐藏一些按钮。例如,我有一个recyclerw视图,其中有两个项目如下

单击第一项时,应显示编辑和删除按钮。我的适配器代码如下:

using Android.Support.V7.Widget;
using Android.Views;
using Android.Widget;
using System;
using System.Collections.Generic;

namespace RecyclerViewTest
{
    internal class BuyerAdapter : RecyclerView.Adapter
    {
        public List<Buyer> mlivestock;
        public event EventHandler<int> ItemClick;

        public BuyerAdapter(List<Buyer> photoAlbum)
        {
            mlivestock = photoAlbum;
        }
        public override RecyclerView.ViewHolder
            OnCreateViewHolder(ViewGroup parent, int viewType)
        {
            View itemView = LayoutInflater.From(parent.Context).
                        Inflate(Resource.Layout.PersonCardView, parent, false);
            PhotoViewHolder vh = new PhotoViewHolder(itemView, ItemOnClick);
            return vh;
        }

        void ItemOnClick(int position)
        {
            if (ItemClick != null)
                ItemClick(this, position);
        }

        public override void
            OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
        {
            PhotoViewHolder vh = holder as PhotoViewHolder;
            vh.Agent.Text = mlivestock[position].Agent;
            vh.Pen.Text = mlivestock[position].Pen.ToString();

        }
        public override int ItemCount
        {
            get { return mlivestock.Count; }
        }

    }

    public class PhotoViewHolder : RecyclerView.ViewHolder
    {
        public TextView Agent { get; private set; }
        public TextView Pen { get; private set; }

        public PhotoViewHolder(View itemView, Action<int> listener)
            : base(itemView)
        {
            Agent = itemView.FindViewById<TextView>(Resource.Id.agent);
            Pen = itemView.FindViewById<TextView>(Resource.Id.pen);

            itemView.Click += (sender, e) => listener(base.AdapterPosition);
        }
    }
}
使用Android.Support.V7.Widget;
使用Android.Views;
使用Android.Widget;
使用制度;
使用System.Collections.Generic;
命名空间回收服务测试
{
内部类BuyerAdapter:RecyclerView.Adapter
{
上市公司;
公共事件事件处理程序项单击;
public BuyerAdapter(列表相册)
{
mlivestock=相册;
}
公共覆盖RecyclerView.ViewHolder
OnCreateViewHolder(视图组父级,int-viewType)
{
View itemView=LayoutInflater.From(parent.Context)。
充气(Resource.Layout.PersonCardView,父级,false);
PhotoViewHolder vh=新的PhotoViewHolder(itemView,ItemOnClick);
返回vh;
}
void ItemOnClick(int位置)
{
如果(ItemClick!=null)
项目点击(此,位置);
}
公共覆盖无效
OnBindViewHolder(RecyclerView.ViewHolder,int位置)
{
PhotoViewHolder vh=作为PhotoViewHolder的支架;
vh.Agent.Text=mlivestock[position].Agent;
vh.Pen.Text=mlivestock[position].Pen.ToString();
}
公共覆盖int ItemCount
{
获取{return mlivestock.Count;}
}
}
公共类PhotoViewHolder:RecyclerView.ViewHolder
{
公共文本视图代理{get;private set;}
公共文本视图笔{get;private set;}
公共PhotoViewHolder(视图项视图、动作侦听器)
:基本(项目视图)
{
Agent=itemView.findviewbyd(Resource.Id.Agent);
Pen=itemView.findviewbyd(Resource.Id.Pen);
itemView.Click+=(发送者,e)=>listener(base.AdapterPosition);
}
}
}

我已经添加了一个“ItemClick”事件,它应该显示/隐藏按钮。我还希望有编辑和删除按钮的点击事件。我怎样才能做到这一点?任何帮助都将不胜感激。

设置适配器变量:

private int currentSelectedPosition = RecyclerView.NO_POSITION
更改
personCardView
适配器布局,使两个按钮都在其中,并将其可见性设置为
GONE
。在您的
视图夹中引用它们(例如按钮
编辑按钮
按钮
删除按钮

在项目
onClickListener
中,设置
currentPosition
并调用notifyDataSetChanged()-这是重新隐藏以前选择中的按钮并显示此选择中的按钮所必需的。然后在
onBindViewHolder
中,应用
VISIBLE
GONE
逻辑,如下所示。我个人将
项ClickListener
也设置在
onBindViewHolder
中,因此整个方法如下所示:

public void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)  {
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               currentSelectedPosition = position;
               notifyDataSetChanged();
            }
        });
        if (currentSelectedPosition == position) {
             holder.editButton.setVisibility(View.VISIBLE);
             holder.editButton.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View view) {
                       // your edit button click event here
                  }
             });
             holder.deleteButton.setVisibility(View.VISIBLE);
             holder.deleteButton.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View view) {
                     // your delete button click event here
                  }
             });
        } else {
             holder.editButton.setVisibility(View.GONE);
             holder.deleteButton.setVisibility(View.GONE);
        }
      //..... the rest of your code for onBindViewHolder (updating your text views and so on)
    }

设置适配器变量:

private int currentSelectedPosition = RecyclerView.NO_POSITION
更改
personCardView
适配器布局,使两个按钮都在其中,并将其可见性设置为
GONE
。在您的
视图夹中引用它们(例如按钮
编辑按钮
按钮
删除按钮

在项目
onClickListener
中,设置
currentPosition
并调用notifyDataSetChanged()-这是重新隐藏以前选择中的按钮并显示此选择中的按钮所必需的。然后在
onBindViewHolder
中,应用
VISIBLE
GONE
逻辑,如下所示。我个人将
项ClickListener
也设置在
onBindViewHolder
中,因此整个方法如下所示:

public void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)  {
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               currentSelectedPosition = position;
               notifyDataSetChanged();
            }
        });
        if (currentSelectedPosition == position) {
             holder.editButton.setVisibility(View.VISIBLE);
             holder.editButton.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View view) {
                       // your edit button click event here
                  }
             });
             holder.deleteButton.setVisibility(View.VISIBLE);
             holder.deleteButton.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View view) {
                     // your delete button click event here
                  }
             });
        } else {
             holder.editButton.setVisibility(View.GONE);
             holder.deleteButton.setVisibility(View.GONE);
        }
      //..... the rest of your code for onBindViewHolder (updating your text views and so on)
    }


这个答案虽然不是严格地回答您的确切问题,但它确实向您展示了在使用
RecyclerView
时如何处理单击事件。事实上,重新阅读你的问题和答案,这似乎是一个完美的结合。我想要一个项目点击事件来显示和隐藏该项目内的按钮。如果你阅读并理解我链接的答案,你将能够做到这一点。答案中的测试适配器代码与您想要的非常相似。一旦你理解了它,就根据你的需要调整它。当前唯一的区别是,您希望更改按钮的可见性,而我向您展示的按钮更改了Checked属性。@SandePeyohans StackOverflow不是这样工作的。你需要自己提出一个新问题。这样评论别人的问题会严重限制看到它的人的数量。这个答案虽然不是严格地回答你的确切问题,但确实向你展示了在使用
RecyclerView
时如何处理点击事件。事实上,重新阅读你的问题和答案,这似乎是一个完美的结合。我想要一个项目点击事件来显示和隐藏该项目内的按钮。如果你阅读并理解我链接的答案,你将能够做到这一点。答案中的测试适配器代码与您想要的非常相似。一旦你理解了它,就根据你的需要调整它。当前唯一的区别是,您希望更改按钮的可见性,而我向您展示的按钮更改了Checked属性。@SandePeyohans StackOverflow不是这样工作的。你需要自己提出一个新问题。像这样评论别人的问题将严重限制看到它的人数。我更新了它,以显示如何处理编辑和删除按钮的单击事件,正如您所问:-)我如何引用ViewHolder中的按钮?就像您对2个文本视图所做的那样。。。。因此,使用id将它们添加到PersonCardView布局文件中,然后:editButton=itemView.findViewById(R.id.btn_edit);delete=itemviewbyd(R.id.btn\u delete);非常感谢你的帮助。只需一个小查询,如果我必须删除所选项目,那么我将如何执行?assu