【发布时间】:2019-02-04 22:26:14
【问题描述】:
我的自定义适配器的 GetView 方法中有以下代码:
public override View GetView(int position, View convertView, ViewGroup parent)
{
var view = convertView ?? activity.LayoutInflater.Inflate(
Resource.Layout.ScannedTuListItem, parent, false);
var scannedTu = view.FindViewById<TextView>(Resource.Id.scannedTu);
var tuTxt = activity.Resources.GetString(Resource.String.tu);
var custTxt = activity.Resources.GetString(Resource.String.customer);
var orderTxt = activity.Resources.GetString(Resource.String.order);
var targetBinTxt = activity.Resources.GetString(Resource.String.targetBin);
scannedTu.Text =
$"{tuTxt} {tus[position].No}" +
$"\n{custTxt} {tus[position].Customer} / {orderTxt} {tus[position].Order}" +
(string.IsNullOrEmpty(tus[position].TargetBin) ?
string.Empty : $"\n{targetBinTxt} {tus[position].TargetBin}");
if (tus[position].AtPackingStation && !tus[position].Ready)
{
scannedTu.SetBackgroundColor(Color.Yellow);
scannedTu.SetTextColor(Color.Black);
}
else if (tus[position].AtPackingStation && tus[position].Ready || tus[position].ScanOk == true)
{
scannedTu.SetBackgroundColor(Color.Green);
scannedTu.SetTextColor(Color.Black);
}
else if (tus[position].ScanOk == false)
{
scannedTu.SetBackgroundColor(Color.Red);
scannedTu.SetTextColor(Color.Black);
}
return view;
}
当我将属性 ScanOK 和 Ready 更改为 True 时,例如,对于列表中的前 3 个项目,它会自动将屏幕外项目的背景颜色也设置为绿色。
如何让它只为前 3 个项目着色而不影响屏幕外的项目?
【问题讨论】:
-
你能提供更多关于你的 listview 项目的代码吗?
tus[position].Readytus[position].ScanOktus[position].AtPackingStation是什么意思?可以调试一下,检查if/else是否满足要求。 -
@Leon Lu - MSFT 我已经调试过了,例如对于 10 个项目,如果只有前 3 个符合标准并且实际上在屏幕上可见,它仍然会更改其他一些项目的背景颜色。它似乎是随机的......
标签: xamarin.android baseadapter notifydatasetchanged getview