在我的listView适配器类中,我有一个委托,将一个功能分配给listview中的每个按钮。此按钮应在我的“ Spices”对象中切换一个名为cupboard
的布尔值。第一次单击时起作用,并将其更改为“ true”。但是,它不会再回到假。知道是什么原因导致它不再重新设置为false吗?这是我在这里的第一篇文章,如果重复,我们深表歉意。
我尝试将默认值“ false”更改为具有getter和setter方法,并尝试使用不同的if / else语句来切换布尔值。
这来自GetView()
函数内部的自定义listView适配器:
Button AddToCupboard = row.FindViewById<Button>(Resource.Id.AddToCupboard);
//Adds onclick event for "Add to cupboard"
AddToCupboard.Click += delegate
{
var item = mItems[position].cupboard;
item = !item;
Console.WriteLine(item);
};
我的Spice
班:
class Spice
{
public string name { get; set; }
public string flavour { get; set; }
public string picture { get; set; }
public string substitute { get; set; }
public string description { get; set; }
public string uses { get; set; }
public bool cupboard { get; set; }
public bool list { get; set; }
}
我希望控制台在两次按下同一按钮时先输出True
,然后输出False
,但它停留在true
。
答案 0 :(得分:0)
之所以会这样,是因为您实际上并没有从Spice对象中更改cupboard
的值。
AddToCupboard.Click += delegate
{
var mItem = mItems[position];
mItem.cupboard = !mItem.cupboard;
}
在您的示例中,您将cupboard
值复制到局部变量,将其从T切换为F,仅此而已。 mItems
数组将保持不变,因为所有操作都是在目标变量的副本上完成的。