Se uso il tag merge
come il tag principale per il layout del mio frammento, mi imbatto in due problemi:È possibile utilizzare il tag di unione con i frammenti?
prima, in
onCreateView()
, se mi specificare di non allegare alla radice, ottengo l'errore:android.view.InflateException: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true
e se io attribuisco alla radice, ottengo l'errore:
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
Ho trovato una bella risposta a un'altra domanda qui dicendo che la libreria dei frammenti collegherà automaticamente il bambino al gruppo di visualizzazione padre specificato in sostituzione. Il suggerimento era che era necessario impostare attachToRoot
su false
. Per il tag merge
, è obbligatorio.
È possibile aggirare una di queste regole per utilizzare il tag merge
per il layout di un frammento?
Così il 'android.view.InflateException: può essere utilizzato solo con una radice ViewGroup valido e attachToRoot = true' è a causa del' attachToRoot = false' (la radice ViewGroup è valido) ? –
@Mr_and_Mrs_D Sì, perché per 'false' il layout gonfiato non verrà aggiunto al' ViewGroup' e questo è esattamente ciò che richiede il tag 'merge'. Inoltre, penso che verrà lanciata la stessa eccezione se si usa 'true' per' attachToRoot' ma con 'View' Null' per il secondo parametro (che significa nessun genitore a cui allegare il layout gonfiato). – Luksprog
Grazie - quanto fastidioso - lo stesso messaggio di errore per 2 situazioni. Per quanto riguarda 'unisci' e' frammenti' potresti trovare [questo] (http://stackoverflow.com/a/15315289/281545) di interesse –