Ho impostato un nuovo progetto con l'implementazione del modello di Navigation Drawer Fragment e MainActivity.Navigation Drawer onNavigationDrawerItemSelected chiamato prima di MainActivity onCreate?
Mi dà i seguenti metodi rilevanti:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = getIntent();
token = intent.getStringExtra(EXTRA_TOKEN);
mNavigationDrawerFragment = (NavigationDrawerFragment)
getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
mNavigationDrawerFragment.activityMain = this;
mTitle = getTitle();
// Set up the drawer.
mNavigationDrawerFragment.setUp(
R.id.navigation_drawer,
(DrawerLayout) findViewById(R.id.drawer_layout));
}
mio MainActivity viene avviato da un'attività iniziale che ottiene un token di accesso salvato tramite l'EXTRA_TOKEN.
Questa è la sostituzione della navigazione cassetto voce selezionata ascoltatore nella MainAcitivity:
@Override
public void onNavigationDrawerItemSelected(int position) {
// update the main content by replacing fragments
FragmentManager fragmentManager = getSupportFragmentManager();
onSectionAttached(position + 1);
switch(position) {
case 0:
fragmentManager.beginTransaction()
.replace(R.id.container, FeedFragment.newInstance(token, ""))
.commit();
break;
case 1:
fragmentManager.beginTransaction()
.replace(R.id.container, PeopleFragment.newInstance("", ""))
.commit();
break;
case 2:
if(qbloggedin) {
fragmentManager.beginTransaction()
.replace(R.id.container, MessagesFragment.newInstance(token, ""))
.commit();
}
break;
default:
break;
}
}
inizia tre frammenti differenti a seconda di quale è selezionato elemento nella NavDrawer. Mentre si istanziano i nuovi frammenti, la stringa token
viene passata nel suo costruttore, che viene salvato nella classe del frammento per un ulteriore utilizzo.
Al primo avvio, tuttavia, sembra che onNavigationDrawerItemSelected
venga chiamato prima dello onCreate
! Questo mi ha portato a passare un token di valore nullo nei frammenti, causando loro di essere tutti incasinati.
Com'è possibile? A quanto ho capito, NavigationDrawerFragment non dovrebbe essere stato ancora configurato!
Ho impostato i punti di interruzione su entrambi onCreate
e su onNavigationDrawerItemSelected switch position = 0
. onNavigationDrawerItemSelected
è effettivamente raggiunto prima dello onCreate
.
Come posso assicurarmi di ottenere il token prima di provare a gestire lo onNavigationDrawerItemSelected
?
Qualsiasi aiuto sarebbe apprezzato.
Aiuto per favore quando per esempio intent.method() ha un parametro di contesto. Quando c'è un parametro di contesto, intent.method (contesto) ottiene un contesto nullo. –