在recyclerview中隐藏/显示按钮 [英] Hide/show buttons inside recyclerview

查看:640
本文介绍了在recyclerview中隐藏/显示按钮的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

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

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.

推荐答案

设置适配器变量:

private int currentSelectedPosition = RecyclerView.NO_POSITION

更改您的personCardView适配器布局,以同时包含两个按钮,并将其可见性设置为GONE.在您的ViewHolder中引用它们(例如按钮editButtonButton deleteButton)

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)

在项目onClickListener中,设置currentPosition并调用notifyDataSetChanged()-这是重新隐藏先前选择中的按钮并显示此选择中的按钮所必需的.然后在onBindViewHolder中,如下应用VISIBLEGONE逻辑.我也亲自在onBindViewHolder中设置了itemClickListener,因此整个方法如下所示:

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

这篇关于在recyclerview中隐藏/显示按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆