在recyclerview中隐藏/显示按钮 [英] Hide/show buttons inside 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
中引用它们(例如按钮editButton
,Button
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
中,如下应用VISIBLE
或GONE
逻辑.我也亲自在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屋!