質問

現在、既存のテーブルに行を追加するアプリケーションを作成しています。コードは次のようになります:

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で定義されているものではなく、新しく作成されたビュー用に呼び出されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top