2015-09-23 48 views
1

下面的循環如果運行一次(n = 1),但是爲多次執行分支(n> 1),則循環工作。以編程方式在同一個容器中多次添加視圖

IllegalStateException:指定的子項已經有父項。您必須先調用子對象的父對象的removeView()。在行「containerLL.addView(divider);」

在此循環中還使用「新」創建了其他視圖,但與當前問題無關。

我不確定是否需要每次都創建一個「新」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

試試這個。

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

我不知道如果我需要做一個 「新」 的RelativeLayout每次

不,你的問題是你的dividerrl的孩子。它不能是rl的孩子,也不能是containerLL的孩子。它必須是一個或另一個的孩子。

此外,請勿使用LayoutInflater.from(activity)。使用activity.getLayoutInflater()。否則,你的風格和主題可能會變得混亂。

相關問題