GetView обновляет элементы вне экрана - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть следующий код внутри метода 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 элементов не влиял на элементы вне экрана?

1 Ответ

0 голосов
/ 05 февраля 2019

Когда я изменяю Property ScanOK и Ready to True, скажем, для первых 3 элементов в списке, он автоматически устанавливает цвет фона элементов вне экрана также на Зеленый.

Как сделатьЯ заставляю его раскрашивать только первые 3 элемента, не затрагивая элементы за пределами экрана?

Для этого вам нужно будет добавить начальное условие на основе позиции, например,

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

Также, если вы хотите отметить на основе того, сколько элементов списка отображается на экране, вы можете проверить это SO ответ

...