Ich habe ein neues Projekt mit der Template-Implementierung von Navigation Drawer Fragment und einer MainActivity eingerichtet.Navigation Drawer onNavigationDrawerItemSelected wurde vor MainActivity onCreate aufgerufen?
Es bietet mir die folgenden relevanten Methoden:
@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));
}
Mein MainActivity von einem Schuss Aktivität gestartet wird, die einen gespeicherten Zugriffstoken über die EXTRA_TOKEN bekommt.
Dies ist die Überschreibung der Artikel Navigationsleiste wählen Hörer im 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;
}
}
Es beginnt drei verschiedene Fragmente in Abhängigkeit von dem Element in der NavDrawer ausgewählt ist. Während die neuen Fragmente instanziiert werden, wird die token
-Zeichenfolge in ihren Konstruktor übergeben, der in der Klasse des Fragments für die weitere Verwendung gespeichert wird.
Beim ersten Start der App scheint es jedoch, dass onNavigationDrawerItemSelected
vor onCreate
aufgerufen wird! Dies führt dazu, dass ich ein Nullwert-Token in die Fragmente übergebe, was dazu führt, dass sie alle durcheinander sind.
Wie ist das möglich? Wie ich es verstehe, sollte das NavigationDrawerFragment noch nicht eingerichtet worden sein!
Ich setze Haltepunkte sowohl auf onCreate
als auch auf onNavigationDrawerItemSelected switch position = 0
. onNavigationDrawerItemSelected
wird tatsächlich vor onCreate
getroffen.
Wie kann ich sicherstellen, dass das Token zuerst erhalten, bevor Sie versuchen, die onNavigationDrawerItemSelected
zu behandeln?
Jede Hilfe wäre willkommen.
Hilfe bitte, wenn zum Beispiel intent.method() einen Kontextparameter hat. Wenn ein Context-Parameter vorhanden ist, erhält intent.method (context) einen Null-Kontext. –