当我在Xamarin Android中的ListView中选择一个项目时,选择了双人

时间:2018-01-09 14:14:18

标签: android listview xamarin

当我在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的另一部分中选择两次对称。我必须做些什么才能解决这个问题?请跟我说吧!比你!

2 个答案:

答案 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是管理它的好方法

希望有所帮助