Я настроил новый проект с реализацией шаблона фрагмента навигационного ящика и MainActivity.
Он предоставляет мне следующие соответствующие методы:
@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));
}
Моя MainActivity запускается активностью-заставкой, которая получает сохраненный токен доступа через EXTRA_TOKEN.
Это переопределение прослушивателя выбора элемента Navigation Drawer в 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;
}
}
Он запускает три разных фрагмента в зависимости от того, какой элемент выбран в NavDrawer. При создании новых фрагментов строка token передается в его конструктор, который сохраняется в классе фрагмента для дальнейшего использования.
Однако при первом запуске приложения кажется, что onNavigationDrawerItemSelected вызывается перед onCreate! Это приводит к тому, что я передаю токен с нулевым значением во фрагменты, в результате чего они все перепутались.
Как это возможно? Насколько я понимаю, NavigationDrawerFragment еще не должен был быть настроен!
Я установил точки останова как на onCreate, так и на onNavigationDrawerItemSelected switch position = 0. onNavigationDrawerItemSelected действительно был поражен до onCreate.
Как я могу убедиться, что сначала получил токен, прежде чем пытаться обработать onNavigationDrawerItemSelected?
Любая помощь будет оценена по достоинству.