IllegalstateException quando si aggiunge una vista a una tablerow su Android
-
27-10-2019 - |
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?
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.