我已經使用Navigation Drawer Fragment和MainActivity的模板實現設置了一個新項目。導航抽屜onNavigationDrawerItemSelected在MainActivity onCreate之前調用?
它爲我提供了以下相關的方法:
@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保存的訪問令牌啓動。
這是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
之前先獲取令牌?
任何幫助,將不勝感激。
請幫忙,例如intent.method()有一個Context參數。當有Context參數時,intent.method(context)會獲得一個空Context。 –