Sono in procinto di creare la mia prima app per Android, e ho un Fragment
che viene aggiunto al mio Activity
nel metodo . Il problema che sto affrontando è che non sono in grado di trovare nessuna delle viste contenute all'interno dello Fragment
dal metodo Activity
.Visualizza frammento di accesso da ActivityCreate
Altre discussioni hanno suggerito che ciò è dovuto al fatto che lo Fragment
non è stato ancora gonfiato, pertanto findViewById()
restituirà null per qualsiasi vista contenuta all'interno dello Fragment
.
Ecco cosa intendo:
attività:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("activity onCreate");
setContentView(R.layout.activity_main);
if (savedInstanceState != null) {
return;
}
initialiseUI(); // Fragment added to Activity
System.out.println("end of activity onCreate");
}
Frammento:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
System.out.println("fragment onCreateView");
return inflater.inflate(R.layout.event_log, container, false);
}
Questo stampa i risultati:
attività onCreate fine dell'attività onCreate frammento onCreateView
A causa di questo ordine, qualsiasi tentativo di accedere alle visualizzazioni del Fragment
nella Activity
'metodo s onCreate()
(usando findViewById()
) produce un NullPointerException
, come Fragment
' s onCreateView()
solo viene richiamato dopo la fine degli s Activity
onCreate()
.
L'utilizzo dello FragmentManger
di executePendingTransactions()
dopo l'aggiunta di Fragment
non è di aiuto.
Fondamentalmente, sono stato costretto a mettere il codice problema nel Activity
'onStart()
metodo anziché onCreate()
s, come onStart()
accade dopo la Fragment
' s onCreateView()
.
Qualcuno qual è la pratica standard qui o il modo in cui posso far funzionare il mio codice di accesso alla vista frammento nel metodo onCreate()
Activity
?
Perché si desidera accedere alle viste di 'Fragment' nel metodo' suCreate() 'di Activity? Qualcosa non va nella tua scelta. – biegleux
In particolare, dopo aver aggiunto un frammento nel metodo onCreate() di Activity, voglio cambiare il testo di una TextView contenuta all'interno del Fragment e aggiungere alcuni elementi a uno Spinner. Cosa potrebbe esserci di sbagliato nel mio design? – Dan
Aggiorna il layout del tuo frammento nel metodo 'Fragment' su onCreateView()'. Vedi la mia risposta. – biegleux