AndroidでTableRowにビューを追加するときのIllegalStateException
-
27-10-2019 - |
質問
現在、既存のテーブルに行を追加するアプリケーションを作成しています。コードは次のようになります:
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);
XMLでは、TabWidgetの中にあるFrameLayoutの内側にあるLinearLayoutの内側にあるテーブルレイアウトがあります。
<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()に電話する必要があります。
私はそれを完全に理解していません。のようなチュートリアルを見るとき これ 最初に削除する必要があるものはありません。それで、私は正確に何が間違っているのでしょうか?
解決
XMLファイルに既に追加されたTableRowにコードを追加したExamPlelabelが同じテーブルに追加されました。
UI要素には1人の親しか持たないため、これは不可能です。
また、なぜそれをもう一度追加したいのか、なぜそれがまったく同じビューに追加されているので、私はわかりません。
チュートリアルでは、XMLファイルのテーブルにすでに追加されているTextViewを見つけましたか?
他のヒント
あなたのTextViewはすでに別の見解の子供です。親を単純に変更することはできません - 1つの親からビューを削除し、別の親に追加する必要があります。
よく見ると、特定のテキストビューをテーブルロウに手動で追加する必要はありません。XMLに従ってすでにそこにあります。
addView()メソッドは通常、XMLで定義されているものではなく、新しく作成されたビュー用に呼び出されます。