我正在使用带有自定义适配器的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
答案 0 :(得分:1)
您需要为适配器创建一个支架,以便每次滚动时都不会重新创建项目。
private class Holder {
TextView text1;
TextView text2;
}
然后在你的getView方法中,你必须按持有者名称调用这些文本视图。
有关更多信息,请参阅此链接:
答案 1 :(得分:0)
但每次我向上或向下滚动它都会重新填充ListView中的项目并更改回默认值。
由于您只更改了文本视图中的文本,而不是mitems
中的数据。当listrow被回收并重新绑定时,它再次绑定来自mitems
的数据。因此,您需要修改mitems
中的数据
例如:
txtCategoryName.Click += delegate
{
txtCategoryName.Text = "CustomText";
mitems[position].CategoryName = "CustomText";
};