2017-10-19 80 views
0

我想在点击回收站项目的回收站视图中显示和隐藏一些按钮。例如,我有一个像这样的两个项目的recyclerw视图enter image description hererecyclerview内的隐藏/显示按钮

单击第一个项目时,应显示编辑和删除按钮。我的适配器代码是在这里:

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

我添加了一个“项目单击”事件应显示/隐藏的按钮。我还想要编辑和删除按钮的点击事件。我怎样才能做到这一点?任何帮助,将不胜感激。

+0

这个答案,而不是严格为您详细的问题的答案,并告诉你如何处理使用'RecyclerView'时,单击事件。 https://stackoverflow.com/questions/44520390/disable-all-other-toggle-buttons-in-recycler-view-after-one-is-clicked/44521692#44521692 – Kuffs

+0

其实,重新读你的问题和答案,它似乎是一个完美契合。 – Kuffs

+0

我想要一个项目点击事件来显示并隐藏该项目内的按钮 – Arti

回答

1

设置一个适配器变量:

private int currentSelectedPosition = RecyclerView.NO_POSITION 

更改personCardView适配器布局,在他们这两个按钮,并设置其知名度GONE。参考他们在你ViewHolder(如按钮editButtonButtondeleteButton

在您的项目onClickListener,设置currentPosition并调用notifyDataSetChanged() - 这是需要重新隐藏在先前的选择按钮,并显示在此选择的按钮。然后在onBindViewHolder中,应用VISIBLEGONE逻辑如下。我个人设置里面itemClickListeneronBindViewHolder,所以整个方法是这样的:

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) 
    } 
+0

我更新它包括显示如何处理编辑和删除按钮的点击事件,如您所问:-) –

+0

我该如何ViewHolder中的参考按钮? – Arti

+1

就像您为2个textview所做的那样....所以将它们添加到您的PersonCardView布局文件中,然后使用ID: editButton = itemView.findViewById(R.id.btn_edit); delete = itemView.findViewById(R.id.btn_delete); –