当我在Xamarin Android中的ListView中选择一个项目时,选择双胞胎。在Xamarin.Forms中存在设置ListView:RetainElement的缓存策略 和RecycleElement。
С#
var listView = new ListView(ListViewCachingStrategy.RecycleElement);
XAML
<ListView CachingStrategy="RecycleElement">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
...
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
如何在Xamarin Android中配置缓存?因为我有问题,当我在ListView中选择一些项目时,它会在ListView的另一部分中选择两次对称。我必须做些什么才能解决这个问题?请跟我说吧!比你!
答案 0 :(得分:0)
List<string> contactList;
ListView list;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.Main);
list = FindViewById<ListView>(Resource.Id.listView1);
var uri = ContactsContract.CommonDataKinds.Phone.ContentUri;
string[] projection = { ContactsContract.CommonDataKinds.Phone.Number, ContactsContract.Contacts.InterfaceConsts.DisplayName };
var cursor = ContentResolver.Query(uri, projection, null, null, null);
contactList = new List<string>();
if (cursor.MoveToFirst())
{
while (cursor.MoveToNext())
contactList.Add(cursor.GetString(cursor.GetColumnIndex(projection[0])) + cursor.GetString(cursor.GetColumnIndex(projection[1])));
}
var ListAdapter = new ArrayAdapter<string>(this, Resource.Layout.ContactItemView, contactList);
list.Adapter = ListAdapter;
list.ItemClick += (sender, e) => { ListAdapter.Remove(contactList[e.Position]); Console.WriteLine(ListAdapter.GetItem(e.Position)); };}
答案 1 :(得分:0)
回收工作如下:当您显示列表时,假设显示有6个项目,那么您将拥有至少6个单元格实例的池。滚动时,消失的单元格实例“返回”“未使用”的实例池。当listview必须显示一个新单元格时,将使用此池,以便现有实例再次用于其他行以及其他内容。
请查看this answer以获得更好的解释
您的问题似乎是单击单元格时单元格(视图实例)状态发生了更改,重新使用该实例时未重置。
您应该记录每个单元格内容的状态,并在获取任何单元格时进行分配。 ViewHolder Pattern是管理它的好方法
希望有所帮助