gpt4 book ai didi

android - RecyclerView OnClick 在其他位置更改项目

转载 作者:行者123 更新时间:2023-12-04 23:46:37 25 4
gpt4 key购买 nike

我在 RecyclerView 中有一个字符串列表。我需要能够单击列表中的项目并将背景更改为黄色。我可以单击一个项目并更改背景,但是当我向下滚动列表时,我看到列表中的另一个项目的背景也变成了黄色?

我尝试了许多不同的方法来实现这一点。我尝试设置一个界面,点击 ViewHolder 等。

我的代码如下。

Activity :

[Activity(Label = "PregnancyListActivity")]
public class PregnancyListActivity : Activity
{
RecyclerView mRecyclerView;
RecyclerView.LayoutManager mLayoutManager;
PregnantAnimalAdapter mAdapter;

protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.PregnancyListLayout);

mRecyclerView = FindViewById<RecyclerView>(Resource.Id.recyclerView);

// Plug in the linear layout manager:
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.SetLayoutManager(mLayoutManager);

// Plug in my adapter:
mAdapter = new PregnantAnimalAdapter();
mAdapter.ItemClick += MAdapter_ItemClick;
mRecyclerView.SetAdapter(mAdapter);
}
}

查看持有人
[Activity(Label = "PregnantAnimalViewHolder")]
public class PregnantAnimalViewHolder : RecyclerView.ViewHolder
{
public LinearLayout mBackground { get; private set; }
public TextView mAnimalTag { get; private set; }

public PregnantAnimalViewHolder(View itemView) : base(itemView)
{
// Locate and cache view references:
mBackground = itemView.FindViewById<LinearLayout>(Resource.Id.pregnancyBackground);
mAnimalTag = itemView.FindViewById<TextView>(Resource.Id.animalTag);

}
}

适配器:
public class PregnantAnimalAdapter : RecyclerView.Adapter
{
public PregnantAnimalAdapter pregnantAnimalAdapter;
public List<PregAnimals> mAnimals;

public PregnantAnimalAdapter()
{
mAnimals = new List<PregAnimals>{
new PregAnimals("111", false),
new PregAnimals("112", false),
new PregAnimals("113", false),
new PregAnimals("114", false),
new PregAnimals("115", false),
new PregAnimals("221", false),
new PregAnimals("222", false),
new PregAnimals("223", false),
new PregAnimals("224", false),
new PregAnimals("225", false),
new PregAnimals("331", false),
new PregAnimals("332", false),
new PregAnimals("333", false),

new PregAnimals("444", false),
new PregAnimals("443", false),
new PregAnimals("554", false),
new PregAnimals("4435", false),
new PregAnimals("4234", false),
new PregAnimals("543", false),
new PregAnimals("3452", false),
new PregAnimals("3321", false),
new PregAnimals("6676", false),
new PregAnimals("4367", false)
};
}

public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
View itemView = LayoutInflater.From(parent.Context).
Inflate(global::RecordMilk.Resource.Layout.PregnancyItem, parent, false);

PregnantAnimalViewHolder vh = new PregnantAnimalViewHolder(itemView);

vh.mBackground.Click += (object sender, EventArgs e) => {
mAnimals[vh.LayoutPosition].Preg = true;
};

return vh;
}



public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
PregnantAnimalViewHolder vh = holder as PregnantAnimalViewHolder;

vh.mAnimalTag.Text = mAnimals[position].Tag;
if (mAnimals[position].Preg == true)
{
vh.mBackground.SetBackgroundResource(RecordMilk.Resource.Color.munster_yellow);
}

}



public override int ItemCount
{
get { return mAnimals.Count; }
}
}

public class PregAnimals
{
public string Tag { get; set; }
public bool Preg { get; set; }

public PregAnimals(string tag, bool preg)
{
Tag = tag;
Preg = preg;
}

}

我对为什么它不只是在列表中设置项目感到困惑。任何帮助将不胜感激。

提前致谢!

最佳答案

尝试在适配器中添加这一行:

@Override
public int getItemViewType(int position) {
return position;
}

关于android - RecyclerView OnClick 在其他位置更改项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51247629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com