GetView在屏幕外更新项目

时间:2019-02-04 22:26:14

标签: xamarin.android baseadapter notifydatasetchanged getview

我的自定义适配器的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;
    }

当我将属性ScanOKReady更改为True时,例如,对于列表中的前3个项目,它会自动将屏幕外项目的背景色也设置为绿色

如何在不影响屏幕外项目的情况下使其仅对前三个项目着色?

1 个答案:

答案 0 :(得分:0)

  

例如,当我将“属性ScanOK”和“准备就绪”更改为True时,对于列表中的前3个项目,它会自动将屏幕外项目的背景色也设置为绿色。

     

如何在不影响屏幕外项目的情况下使其仅对前三个项目着色?

为此,您将必须根据位置来添加初始条件,例如

   If(position>2) //since integers start from zero
   return;

如果您要根据屏幕上显示的列表项进行标记,则可以选中此SO answer