Xamarin динамически добавляет представления, используя inflater внутри цикла, добавляя только одну запись - PullRequest
0 голосов
/ 28 ноября 2018

Я перешел по ссылке ниже, чтобы динамически добавить макет несколько раз, используя inflater и AddView ()

Есть ли способ программно создавать копии макета в Android?

Я использовал цикл для создания нескольких записей.Но идет только одна запись, которая является результатом индекса последнего цикла

Ниже мой код C #

Я могу видеть только одного дочернего элемента в родительском элементе, который является результатом последнего цикла.Что я пропустил?

var parent = FindViewById<RelativeLayout>(Resource.Id.ParentLayoutWrapper);
                    for (int i = 0; i < 4; i++)
                    {
var view = LayoutInflater.Inflate(Resource.Layout.RepeatingLayout, parent, false);
                            var txtView = view.FindViewById<TextView>(Resource.Id.textViewSample);
                            txtView.Text = i.ToString()+ " Android application is debugging";
                            txtView.Id = i;
                            parent.AddView(view, i);
                        }

1 Ответ

0 голосов
/ 28 ноября 2018

Исходный пост, с которым вы работали, имел LinearLayout в качестве родительского макета, а не RelativeLayout , как у вас.Когда вы добавляете вид (или другой макет) к LinearLayout, он позиционируется ниже (когда LinearLayout имеет вертикальную ориентацию) любых существующих элементов в макете.Однако элементы в RelativeLayout должны использовать свойства позиционирования, чтобы определить, где они будут находиться в RelativeLayout, поэтому каждый раз, когда вы добавляете новый макет, RepeatingLayout, поскольку вы не меняете параметры макета, представление/ макет добавляется поверх существующего вида / макета.Поэтому измените родительский макет на LinearLayout в вашем файле макета, и тогда это должно сработать:

LinearLayout parent = FindViewById<LinearLayout>(Resource.Id.parentLayout);
for (int i = 0; i < 4; i++)
{
    var view = LayoutInflater.Inflate(Resource.Layout.RepeatingLayout, null);
    var tv = view.FindViewById<TextView>(Resource.Id.textViewSample);
    tv.Text = i.ToString() + " Android application is debugging";
    parent.AddView(view);
}

Попытка сделать то же самое с RelativeLayout, поскольку родительский макет сильно усложняет вещи без необходимости.

...