SetBackgroundColor для элемента списка в пользовательском адаптере не работает - PullRequest
0 голосов
/ 23 октября 2019

У меня есть рабочий пользовательский адаптер, который я поместил в просмотр списка.
Теперь я успешно добавляю 15 элементов.

Теперь я пытаюсь установить цвет фона для элемента 3 на оранжевый. Эта работа!

Однако, когда я прокручиваю вниз и вверх, цвет фона исчезает.
Как мы можем предотвратить это?

// MENU.axml со списком просмотра1

MENU.axml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#70292929"
    android:layout_gravity="top|right"
    android:orientation="horizontal">
      <ListView
          android:id="@+id/listview1"
          android:background="#1b4f72"
          android:layout_weight="0.5"
          android:layout_gravity="top|left"
          android:layout_width="10px"
          android:layout_height="match_parent">
      </ListView>
</LinearLayout>

// C # код для добавления элементов в просмотр списка1 и попытка установить фон для элемента 3 на оранжевый

Android.Views.View MENUVIEW = LayoutInflater.Inflate(Resource.Layout.MENU, null);
ListView LISTVIEW1 = MENUVIEW.FindViewById<ListView>(Resource.Id.listview1);

                //Add Items to the listview1
                List<String> itemLIST = new List<String>(); 
                for (int i = 0; i < 15; i++)
                {
                    itemLIST.Add("hello" + i); 
                }
                Adapter1 adapter1 = new Adapter1(this, Android.Resource.Layout.SimpleListItem1, itemLIST);
                LISTVIEW1.Adapter = adapter1;

//Set backgroundcolor on item 3
LISTVIEW1.GetChildAt(3).SetBackgroundColor(Android.Graphics.Color.Orange);
TextView tview = listview.GetChildAt(3).FindViewById<TextView>(Resource.Id.itemtext);
tview.SetBackgroundColor(Android.Graphics.Color.Orange);

// Код для адаптера1

   class Adapter1 : BaseAdapter
    {

        Context context;
        int item = 0;
        List<String> items = new List<String>();

        public Adapter1(Context context, int resource, List<String> itemArray)
        {
            items = itemArray;
            item = resource;
            this.context = context;
        }
   

        public override Java.Lang.Object GetItem(int position)
        {
            return position;
        }

        public override long GetItemId(int position)
        {
            return position;
        }
        
        public String getItem(int position)
        {
            return items[position]; //returns list item at the specified position
        }
        public override int GetItemViewType(int position)
        {
            return position;
        }
        

        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            var view = convertView;
            Adapter1ViewHolder holder = null;
           

            if (holder == null)
            {
                holder = new Adapter1ViewHolder();
                var inflater = context.GetSystemService(Context.LayoutInflaterService).JavaCast<LayoutInflater>();

                view = inflater.Inflate(Resource.Layout.textview, parent, false);
                String currentItem = getItem(position);

                //get the TextView for item name and item description
                TextView textViewItemName = view.FindViewById<TextView>(Resource.Id.itemtext);

                //sets the text for item name and item description from the current item object
                textViewItemName.SetText(currentItem, TextView.BufferType.Normal);

                holder.Title = textViewItemName;
                holder.Title.Text = currentItem;
                view.Tag = holder;
            }
            return view;
        }

        //Fill in cound here, currently 0
        public override int Count
        {
            get
            {
                return items.Count;
            }
        }
    }

    class Adapter1ViewHolder : Java.Lang.Object
    {
        //Your adapter views to re-use
        public TextView Title { get; set; }
    }

1 Ответ

0 голосов
/ 23 октября 2019

Вы должны попытаться обновить цвет, используя метод #getView в вашем Adapter1.

  int orangeColorPosition = -1;

  public void setOrangeColorPosition(int position){
      this.orangeColorPosition = position;
      notifyDataSetChanged();
  }

  public override View GetView(int position, View convertView, ViewGroup parent)
    {
        ...
        if(position == orangeColorPosition ){
                // set background color here
        }
        return view;
    }

Затем вызовите adapter1.setOrangeColorPosition (3);следует обновить цвет позиции

...