Domanda

Attualmente sto creando un'applicazione che aggiunge righe a una tabella esistente. Il codice sembra così:

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);

Nell'XML ho un layout del tavolo che si trova all'interno di un linearlayout che è all'interno di un framelayout che è dentro un tabwidget e sembra così:

<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>

La creazione di quelle etichette funziona bene, ma quando voglio aggiungere il testo a una riga, l'applicazione si arresta in modo anomalo e ottengo un "illegalstateException", il messaggio dettagliato è:

Il figlio specificato ha già un genitore. È necessario chiamare prima il genitore del figlio.

Non lo capisco bene. Quando guardo un tutorial come questo Non c'è nulla che debba essere rimosso per primo. Allora cosa sto facendo esattamente di sbagliato?

È stato utile?

Soluzione

ExampleLabel che aggiungi il codice al tablerow che hai già aggiunto nel file XML nella stessa tabella.

Poiché un elemento dell'interfaccia utente può avere solo un genitore, questo non è possibile.

Inoltre, non so perché vuoi aggiungerlo di nuovo, poiché è già aggiunto alla stessa vista esattamente.

Nel tuo tutorial non posso trovare un TextView che è già aggiunto alla tabella nel file XML?

Altri suggerimenti

Il tuo TextView è già figlio di un'altra vista. Non puoi semplicemente cambiare il genitore: devi rimuovere la vista da un genitore e aggiungerla a un altro.

Guardando più da vicino, semplicemente non devi aggiungere manualmente la particolare vista di testo alla riga della tabella: è già lì secondo il tuo XML.

Metodo AddView () di solito invocato per viste appena create, non per quelle che si definiscono in XML.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top