我正在從官方(而且相當過時的)關於導航抽屜的示例中讀取代碼,您可以從IDE輕鬆下載[在Android Studio中,如果您自動導入選擇創建一個新的導航抽屜活動]。不知道爲什麼這個代碼*起作用*
我真的很好奇爲什麼這個實際工作。這裏的目標之一是讓抽屜在啓動時打開,但只有當用戶還沒有學會如何滑動它時。
因此 - 創建抽屜出現,並且您可以手動關閉它。無論如何,你還沒有了解它;代碼要求您至少手動打開抽屜一次,然後再次不會再顯示。這是使用我所知道的SharedPreferences
和本地布爾值mUserLearnedDrawer
完成的。
我會發布一些代碼以及我的問題。 它位於將被加載到抽屜中的片段類中。在這裏,我們說mUserLearnedDrawer應該是什麼在喜好被發現,或假:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity());
mUserLearnedDrawer = sp.getBoolean(PREF_USER_LEARNED_DRAWER, false);
if (savedInstanceState != null) { mFromSavedInstanceState = true; }
在活動的onCreate,我們成立了ActionBarDrawerToggle
,並呼籲:
//..other stuff
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
if (!isAdded()) { return; }
if (!mUserLearnedDrawer) {
// The user manually opened the drawer; store this flag to prevent auto-showing
// the navigation drawer automatically in the future.
mUserLearnedDrawer = true;
SharedPreferences sp = PreferenceManager
.getDefaultSharedPreferences(getActivity());
sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).commit();
}
getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu()
}
};
// If the user hasn't 'learned' about the drawer, open it to introduce them to the drawer,
// per the navigation drawer design guidelines.
if (!mUserLearnedDrawer && !mFromSavedInstanceState) {
mDrawerLayout.openDrawer(mFragmentContainerView);
}
問題1:要求
mFromSavedInstanceState
是錯誤的點是什麼?問題2:不應該
openDrawer()
在結束呼籲onDrawerOpened
,因此設置mUserLearnedDrawer = true
?這將使第一個自動抽屜開口解釋爲用戶滑入屏幕,而不是。事實上,這不會發生 - 在啓動時出現抽屜mUserLearnedDrawer
仍然是錯誤的。爲什麼?
我知道這是非常不尋常的問題,我只是出於好奇而問。
就是這樣,沒有想到DrawerListener。感謝您的時間。 – natario