2011-01-31 2 views
2

현재 행을 기존 테이블에 추가하는 응용 프로그램을 만들고 있습니다. 코드는 다음과 같습니다 : 나는 tabwidget 내부 FrameLayout이 먹으 렴 내부에있는 LinearLayout 그게 전부 내부의 테이블 레이아웃을 가지고 한 XML에서안드로이드에서 TableRow에 뷰를 추가 할 때 IllegalStateException이 발생했습니다.

TextView exampleTextView = (TextView) messageView.findViewById(R.id.exampleLabel); 
exampleTextView.setText(locationMsg.getMessageContent()); 

TableRow tr = (TableRow) messageView.findViewById(R.id.tableRow); 
tr.addView(exampleTextView); 
table.addView(tr); 

과는 다음과 같습니다

<TableLayout 
android:id="@+id/distanceTable" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:layout_gravity="center" 
android:background="#DDDDDD" 
android:stretchColumns="1" > 
<TableRow> 
    <TextView 
    android:textColor="#000000" 
    android:text="@string/label_device" 
    android:layout_gravity="center" 
    android:padding="3dip" 
    android:textSize="18sp" /> 

    <TextView 
    android:textColor="#000000" 
    android:text="@string/label_distance" 
    android:layout_gravity="center" 
    android:padding="3dip" 
    android:textSize="18sp" /> 
    <TextView 
    android:textColor="#000000" 
    android:text="@string/label_time" 
    android:layout_gravity="center" 
    android:padding="3dip" 
    android:textSize="18sp" /> 
</TableRow> 
<TableRow android:id="@+id/tableRow" > 
    <TextView 
    android:id="@+id/exampleLabel" 
    android:textColor="#000000" 
    android:layout_gravity="center" 
    android:padding="3dip" 
    android:textSize="18sp" /> 
    <TextView 
    android:id="@+id/anotherExampleLabel" 
    android:textColor="#000000" 
    android:layout_gravity="center" 
    android:padding="3dip" 
    android:textSize="18sp" /> 
    <TextView 
    android:id="@+id/someOtherLabel" 
    android:textColor="#000000" 
    android:layout_gravity="center" 
    android:padding="3dip" 
    android:textSize="18sp" /> 
</TableRow> 
</TableLayout> 

그 만들기 레이블을 잘 작동하지만 텍스트를 행에 추가 할 때 응용 프로그램이 충돌하고 "IllegalStateException"메시지가 표시됩니다. 자세한 메시지는

입니다. 지정한 자식에 이미 부모가 있습니다. 먼저 부모의 removeView() 을 호출해야합니다.

나는 그것을 얻지 못한다. this과 같은 튜토리얼을 보면 먼저 제거해야 할 것이 없습니다. 그래서 내가 뭘 잘못하고 있니?

답변

1

XML 파일에 이미 추가 한 tableRow에 코드에 추가 한 exampleLabel입니다.

UI 요소에는 부모가 하나만있을 수 있으므로 불가능합니다.

왜 정확히 동일한보기에 추가되었으므로 다시 추가하려는 이유를 알 수 없습니다.

튜토리얼에서 이미 XML 파일의 테이블에 추가 된 텍스트 뷰를 찾을 수 없습니까?

+0

코드에서 정의 할 때 오류가 발생하여 XML에서 이미 레이블을 정의하려고했습니다. 새 질문에서 그 오류를 지정하겠습니다. 감사! – Lars

2

귀하의 텍스트 뷰는 이미 다른 뷰의 하위입니다. 부모를 단순히 변경할 수는 없습니다. 한 부모에서보기를 제거하고 다른 부모에 추가해야합니다.

더 가까이를 보면 테이블 행에 특정 텍스트보기를 수동으로 추가 할 필요가 없습니다. XML보기에 따라 이미 있습니다.

addView() 메소드는 일반적으로 새로 생성 된 뷰에 대해 호출되며 xml에 정의 된 뷰에는 호출되지 않습니다.

관련 문제