recyclerview内的隐藏/显示按钮
我想在点击回收站项目的回收站视图中显示和隐藏一些按钮。例如,我有一个像这样的两个项目的recyclerw视图recyclerview内的隐藏/显示按钮
单击第一个项目时,应显示编辑和删除按钮。我的适配器代码是在这里:
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);
}
}
}
我添加了一个“项目单击”事件应显示/隐藏的按钮。我还想要编辑和删除按钮的点击事件。我怎样才能做到这一点?任何帮助,将不胜感激。
设置一个适配器变量:
private int currentSelectedPosition = RecyclerView.NO_POSITION
更改personCardView
适配器布局,在他们这两个按钮,并设置其知名度GONE
。参考他们在你ViewHolder
(如按钮editButton
,Button
deleteButton
)
在您的项目onClickListener
,设置currentPosition
并调用notifyDataSetChanged() - 这是需要重新隐藏在先前的选择按钮,并显示在此选择的按钮。然后在onBindViewHolder
中,应用VISIBLE
或GONE
逻辑如下。我个人设置里面itemClickListener
太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)
}
我更新它包括显示如何处理编辑和删除按钮的点击事件,如您所问:-) –
我该如何ViewHolder中的参考按钮? – Arti
就像您为2个textview所做的那样....所以将它们添加到您的PersonCardView布局文件中,然后使用ID: editButton = itemView.findViewById(R.id.btn_edit); delete = itemView.findViewById(R.id.btn_delete); –
这个答案,而不是严格为您详细的问题的答案,并告诉你如何处理使用'RecyclerView'时,单击事件。 https://stackoverflow.com/questions/44520390/disable-all-other-toggle-buttons-in-recycler-view-after-one-is-clicked/44521692#44521692 – Kuffs
其实,重新读你的问题和答案,它似乎是一个完美契合。 – Kuffs
我想要一个项目点击事件来显示并隐藏该项目内的按钮 – Arti