为什么Listview滚动刷新我的结果?

时间:2018-04-09 17:30:41

标签: android listview xamarin

我正在使用带有自定义适配器的ListView。按下一行我正在更新列表中的项目。但每次我向上或向下滚动它都会重新填充ListView中的项目并更改回默认值。

这是我的班级:

class CategoryPreviewClass
{
    public string CategoryName { get; set; }
    public string CategoryID { get; set; }
}

这是适配器:

public override View GetView(int position, View convertView, ViewGroup parent)
    {
        View row = convertView;
        if (row == null)
        {
            row = LayoutInflater.From(mContext).Inflate(Resource.Layout.CategoryPreview, null, false);

        }


        TextView txtCategoryName = row.FindViewById<TextView>(Resource.Id.txtCategoryName);
        txtCategoryName.Text = mitems[position].CategoryName;
        TextView txtCategoryID = row.FindViewById<TextView>(Resource.Id.txtCategoryID);
        txtCategoryID.Text = mitems[position].CategoryID;

        txtCategoryName.Click += delegate
        {
            txtCategoryName.Text="CustomText";
        };


        return row;
    }

我应该在每次按ListView时保存更改的值吗? Image

2 个答案:

答案 0 :(得分:1)

您需要为适配器创建一个支架,以便每次滚动时都不会重新创建项目。

private class Holder {
    TextView text1;
    TextView text2;
}

然后在你的getView方法中,你必须按持有者名称调用这些文本视图。

有关更多信息,请参阅此链接:

https://www.myandroidsolutions.com/2012/07/19/android-listview-with-viewholder-tutorial/#.WsumLojwZPY

答案 1 :(得分:0)

  

但每次我向上或向下滚动它都会重新填充ListView中的项目并更改回默认值。

由于您只更改了文本视图中的文本,而不是mitems中的数据。当listrow被回收并重新绑定时,它再次绑定来自mitems的数据。因此,您需要修改mitems中的数据 例如:

    txtCategoryName.Click += delegate
    {
        txtCategoryName.Text = "CustomText";
        mitems[position].CategoryName = "CustomText";
    };