Android 在recyclerview中隐藏/显示按钮
我想在单击的回收器项目中的回收器视图中显示和隐藏一些按钮。例如,我有一个recyclerw视图,其中有两个项目如下 单击第一项时,应显示编辑和删除按钮。我的适配器代码如下:Android 在recyclerview中隐藏/显示按钮,android,android-recyclerview,xamarin.android,Android,Android Recyclerview,Xamarin.android,我想在单击的回收器项目中的回收器视图中显示和隐藏一些按钮。例如,我有一个recyclerw视图,其中有两个项目如下 单击第一项时,应显示编辑和删除按钮。我的适配器代码如下: using Android.Support.V7.Widget; using Android.Views; using Android.Widget; using System; using System.Collections.Generic; namespace RecyclerViewTest { inter
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);
}
}
}
使用Android.Support.V7.Widget;
使用Android.Views;
使用Android.Widget;
使用制度;
使用System.Collections.Generic;
命名空间回收服务测试
{
内部类BuyerAdapter:RecyclerView.Adapter
{
上市公司;
公共事件事件处理程序项单击;
public BuyerAdapter(列表相册)
{
mlivestock=相册;
}
公共覆盖RecyclerView.ViewHolder
OnCreateViewHolder(视图组父级,int-viewType)
{
View itemView=LayoutInflater.From(parent.Context)。
充气(Resource.Layout.PersonCardView,父级,false);
PhotoViewHolder vh=新的PhotoViewHolder(itemView,ItemOnClick);
返回vh;
}
void ItemOnClick(int位置)
{
如果(ItemClick!=null)
项目点击(此,位置);
}
公共覆盖无效
OnBindViewHolder(RecyclerView.ViewHolder,int位置)
{
PhotoViewHolder vh=作为PhotoViewHolder的支架;
vh.Agent.Text=mlivestock[position].Agent;
vh.Pen.Text=mlivestock[position].Pen.ToString();
}
公共覆盖int ItemCount
{
获取{return mlivestock.Count;}
}
}
公共类PhotoViewHolder:RecyclerView.ViewHolder
{
公共文本视图代理{get;private set;}
公共文本视图笔{get;private set;}
公共PhotoViewHolder(视图项视图、动作侦听器)
:基本(项目视图)
{
Agent=itemView.findviewbyd(Resource.Id.Agent);
Pen=itemView.findviewbyd(Resource.Id.Pen);
itemView.Click+=(发送者,e)=>listener(base.AdapterPosition);
}
}
}
我已经添加了一个“ItemClick”事件,它应该显示/隐藏按钮。我还希望有编辑和删除按钮的点击事件。我怎样才能做到这一点?任何帮助都将不胜感激。设置适配器变量:
private int currentSelectedPosition = RecyclerView.NO_POSITION
更改personCardView
适配器布局,使两个按钮都在其中,并将其可见性设置为GONE
。在您的视图夹中引用它们(例如按钮编辑按钮,按钮删除按钮)
在项目onClickListener
中,设置currentPosition
并调用notifyDataSetChanged()-这是重新隐藏以前选择中的按钮并显示此选择中的按钮所必需的。然后在onBindViewHolder
中,应用VISIBLE
或GONE
逻辑,如下所示。我个人将项ClickListener
也设置在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)
}
设置适配器变量:
private int currentSelectedPosition = RecyclerView.NO_POSITION
更改personCardView
适配器布局,使两个按钮都在其中,并将其可见性设置为GONE
。在您的视图夹中引用它们(例如按钮编辑按钮,按钮删除按钮)
在项目onClickListener
中,设置currentPosition
并调用notifyDataSetChanged()-这是重新隐藏以前选择中的按钮并显示此选择中的按钮所必需的。然后在onBindViewHolder
中,应用VISIBLE
或GONE
逻辑,如下所示。我个人将项ClickListener
也设置在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)
}
这个答案虽然不是严格地回答您的确切问题,但它确实向您展示了在使用RecyclerView
时如何处理单击事件。事实上,重新阅读你的问题和答案,这似乎是一个完美的结合。我想要一个项目点击事件来显示和隐藏该项目内的按钮。如果你阅读并理解我链接的答案,你将能够做到这一点。答案中的测试适配器代码与您想要的非常相似。一旦你理解了它,就根据你的需要调整它。当前唯一的区别是,您希望更改按钮的可见性,而我向您展示的按钮更改了Checked属性。@SandePeyohans StackOverflow不是这样工作的。你需要自己提出一个新问题。这样评论别人的问题会严重限制看到它的人的数量。这个答案虽然不是严格地回答你的确切问题,但确实向你展示了在使用RecyclerView
时如何处理点击事件。事实上,重新阅读你的问题和答案,这似乎是一个完美的结合。我想要一个项目点击事件来显示和隐藏该项目内的按钮。如果你阅读并理解我链接的答案,你将能够做到这一点。答案中的测试适配器代码与您想要的非常相似。一旦你理解了它,就根据你的需要调整它。当前唯一的区别是,您希望更改按钮的可见性,而我向您展示的按钮更改了Checked属性。@SandePeyohans StackOverflow不是这样工作的。你需要自己提出一个新问题。像这样评论别人的问题将严重限制看到它的人数。我更新了它,以显示如何处理编辑和删除按钮的单击事件,正如您所问:-)我如何引用ViewHolder中的按钮?就像您对2个文本视图所做的那样。。。。因此,使用id将它们添加到PersonCardView布局文件中,然后:editButton=itemView.findViewById(R.id.btn_edit);delete=itemviewbyd(R.id.btn\u delete);非常感谢你的帮助。只需一个小查询,如果我必须删除所选项目,那么我将如何执行?assu