2

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

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()を呼び出す必要があります。

よくわかりません。このようなチュートリアルを見ると、最初に削除する必要のあるものは何もありません。それで、私は正確に何を間違っているのですか?

4

2 に答える 2

2

あなたのtextviewはすでに別のビューの子です。親を単純に変更することはできません。ある親からビューを削除して、別の親に追加する必要があります。

よく見ると、特定のテキストビューをテーブルの行に手動で追加する必要はありません。xmlに従ってすでにそこにあります。

addView()メソッドは通常、xmlで定義したビューではなく、新しく作成されたビューに対して呼び出されます。

于 2011-01-31T12:36:23.793 に答える
1

同じテーブルのXMLファイルにすでに追加したtableRowにコードで追加したexampleLabel。

UI要素は親を1つしか持つことができないため、これは不可能です。

また、まったく同じビューにすでに追加されているため、なぜ再度追加するのかわかりません。

あなたのチュートリアルでは、xmlファイルのテーブルにすでに追加されているテキストビューを見つけることができませんか?

于 2011-01-31T12:35:31.883 に答える