无法更正将子项添加到LinearLayout

时间:2015-08-11 09:29:46

标签: android android-linearlayout addchild

我有一个简单的任务 - 动态地将子视图添加到LinearLayout,但我不知道,如何以正确的方式执行。

有两种方法:

1。膨胀视图并将父容器传递给inflate方法。

View view = LayoutInflater.from(getActivity()).inflate(R.layout.item, container, true);

在这种情况下,当我有多个子节点时,LayoutInfater每次都会在对其进行充气时返回相同的子视图对象。所以我可以正确初始化其他子视图。

2。下一种方法是使用LinearLayout方法addView(视图视图)。

问题是,子视图丢失了它的LayoutParams状态。 我必须以编程方式为子设置新的LayoutParams。这是一个不太好的做法。

此外,我们可以将子项放在他自己的布局资源文件中的免费包装器布局中。但这也是一个不好的做法,将布局放到包装器上。

我的孩子资源:

<RelativeLayout android:gravity="center_vertical"
            android:paddingLeft="25dp"
            android:layout_width="match_parent"
            android:layout_height="@dimen/list_item_height">

<TextView android:id="@+id/tv_name"
          android:text="Name"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"/>

那么将子项添加到LinearLayout的正确方法是什么,而不是以编程方式添加LayoutParams而没有包装器布局?

非常感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

你有这样的尝试吗?

View view= LayoutInflater.from(getActivity()).inflate(R.layout.item, null, false);

parentView.addView(view);

答案 1 :(得分:0)

如果要将子项添加到RelativeLayout,则需要为子视图设置LayoutParams,如果要将子项添加到LinerLayout,则不需要设置LayoutParams,因此如果要自定义layoutParams,我建议你使用RelativeLayout,或者你可以为子视图创建一个包装器视图,就像:

//inflate a wrapper view
View child = LayoutInflater.from(getActivity()).inflate(R.layout.item, container, false);
//add to a linerLayout
LinerLayout.addChild(child)

答案 2 :(得分:0)

试试这种方式,

View view = LayoutInflater.from(getActivity()).inflate(R.layout.item, **container**, false);
layout.addView(view);