Hide/show buttons inside recyclerview

随声附和 提交于 2019-12-11 17:32:27

问题


I want to show and hide some buttons within the recycler view in recycler item clicked. For example I have a recyclerw view with two items like this

On click of the 1st item, the buttons Edit and delete should be displayed. My adapter code is here:

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

I have added a "ItemClick" event which should show/hide the buttons. I would also want to have click events for edit and delete buttons. How can I achieve this? Any help would be appreciated.


回答1:


Set an adapter variable:

private int currentSelectedPosition = RecyclerView.NO_POSITION

Change your personCardView adapter layout to have both the buttons in them, and set their visibility to GONE. Reference them in your ViewHolder (e.g. Button editButton, Button deleteButton)

In your item onClickListener, set the currentPosition and call notifyDataSetChanged() - this is necessary to re-hide the buttons in previous selections and show the buttons in this selection. Then in onBindViewHolder, apply the VISIBLE or GONE logic as below. I personally set the itemClickListener inside onBindViewHolder too, so the whole method would look like this:

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


来源:https://stackoverflow.com/questions/46827952/hide-show-buttons-inside-recyclerview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!