Xamarin使用Inflater内部循环动态添加视图,仅添加一个条目

时间:2018-11-28 18:32:12

标签: android xaml xamarin duplicates

我点击了以下链接,使用充气器和AddView()多次动态添加布局

Is there a way to programmatically create copies of a layout in 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 :(得分:0)

您工作的原始帖子以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做同样的事情,因为父布局会不必要地使事情复杂化。