以编程方式在同一容器中多次添加视图

时间:2015-09-23 23:34:59

标签: android view

如果运行一次(n = 1),则下面的循环有效,但是多次执行时(n> 1)。

IllegalStateException:指定的子级已有父级。您必须首先在孩子的父母上调用removeView()。 at line" containerLL.addView(divider);"

使用" new"创建了其他视图。在这个循环中,但与手头的问题无关。

我不确定我是否需要制作一个新的"的RelativeLayout 每次或什么是正确的解决方法。

谢谢

divider.xml

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/divider_parent"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
    android:id="@+id/plan_divider"
    android:layout_width="match_parent"
    android:layout_height="2dp"
    android:background="?android:attr/listDivider" />

LinearLayout containerLL = (LinearLayout) activity.findViewById(mContainerViewId);
for(int i = 0; i<n ; i++){
    LayoutInflater li = LayoutInflater.from(activity);
    RelativeLayout rl = (RelativeLayout) activity.findViewById(R.id.divider_parent);
    View divider = li.inflate(R.layout.divider, rl);
    containerLL.addView(divider);
}

2 个答案:

答案 0 :(得分:3)

试试这个。

LinearLayout containerLL = (LinearLayout) activity.findViewById(mContainerViewId);
for(int i = 0; i<n ; i++){
    LayoutInflater li = LayoutInflater.from(activity);
    View divider = li.inflate(R.layout.divider, null, false);
    containerLL.addView(divider);
}

答案 1 :(得分:2)

  

我不确定我是否需要制作一个新的&#34;每次都是RelativeLayout

不,您的问题是您让divider成为rl的孩子。它不能是rl的孩子和containerLL的孩子。它必须是其中一个孩子。

另外,请勿使用LayoutInflater.from(activity)。使用activity.getLayoutInflater()。否则,你的风格和主题可能搞砸了。