Создайте пользовательский адаптер. Как передать аргументы - PullRequest
0 голосов
/ 22 октября 2019

Я пытаюсь создать свой собственный пользовательский адаптер.

Цель состоит в том, чтобы назвать адаптер следующим образом:

List<String> itemLIST = new List<String>(); itemLIST.Add("Hello World");
Adapter1 adapter1 = new Adapter1(context, Android.Resource.Layout.SimpleListItem1, itemLIST);

Теперь я задаюсь вопросом, как построить: "public Adapter1 (....)" Я полагаю, что что-то упустил в моей попытке. Приведенный ниже код является всего лишь фрагментом всего адаптера.

Как правильно заполнить этот код?

    class Adapter1 : BaseAdapter
    {

        Context context;
        int item = Android.Resource.Layout.SimpleListItem1;
        List<String> list1 = new List<String>();

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

1 Ответ

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

Спасибо 0X0nosugar, мне удалось с помощью вашего руководства.

Адаптер заполнен элементами из itemLIST.

Однако при прокрутке вверх и вниз возникает проблема. Элементы, кажется, случайно меняются местами. Почему это происходит?

                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;

Код для адаптера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 override int getItemCount()
        //{
        //    return items.Count(); //returns total of items in the list
        //}
        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 (view != null)
                holder = view.Tag as Adapter1ViewHolder;

            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;
                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; }
    }
...