Mam nowy projekt z szablonem implementacji Fragmentu szuflady nawigacji i MainActivity.Nawigacja szuflady naNavigationDrawerItemSelected wywołana przed MainActivity onCreate?
Zapewnia mnie z następujących odpowiednich metod:
@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));
}
Moja główną działalność rozpoczyna działalność powitalny, który ją zapisaną token dostępu poprzez EXTRA_TOKEN.
To jest przesłanianie z szuflady nawigacji pozycji Wybierz słuchacza w 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;
}
}
Zaczyna trzy różne fragmenty w zależności, który element jest zaznaczony w NavDrawer. Podczas tworzenia nowych fragmentów, ciąg token
jest przekazywany do jego konstruktora, który jest zapisywany w klasie fragmentów do dalszego wykorzystania.
Jednak przy pierwszym uruchomieniu aplikacji wygląda na to, że onNavigationDrawerItemSelected
jest wywoływana przed onCreate
! To powoduje, że przechodzę do fragmentów znacznika wartości pustej, powodując, że wszystkie są pomieszane.
Jak to jest możliwe? Jak już rozumiem, NavDrawerFragment nie powinien być jeszcze skonfigurowany!
Ustawiam punkty przerwania zarówno na onCreate
, jak i na onNavigationDrawerItemSelected switch position = 0
. onNavigationDrawerItemSelected
rzeczywiście jest trafiony przed onCreate
.
Jak mogę się upewnić, że najpierw otrzymam token, zanim spróbuję obsłużyć onNavigationDrawerItemSelected
?
Każda pomoc zostanie doceniona.
Pomoc proszę, gdy na przykład intent.method() ma parametr Context. Gdy istnieje parametr Context, intent.method (kontekst) otrzymuje zerowy kontekst. –