2014-12-30 113 views
0

我正在從官方(而且相當過時的)關於導航抽屜的示例中讀取代碼,您可以從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仍然是錯誤的。爲什麼?

我知道這是非常不尋常的問題,我只是出於好奇而問。

回答

0

問題1:要求mFromSavedInstanceState爲false是什麼意思?

您的活動可能會重新配置上的變化(如屏幕旋轉),這個變量將mFromSavedInstanceState開幕防止抽屜在這種情況下,如果用戶沒有在其使用獲悉呢。

當mFromSavedInstanceState爲false時,這是您第一次在用戶啓動它之後調用onCreate方法。這是當抽屜應該自動打開時,但只有當用戶沒有手動打開(意味着學會如何做到這一點),這是在mUserLearnedDrawer記住。

問題2:

我不完全記得這個代碼,但mUserLearnedDrawer應設置爲用戶明確地手動打開抽屜後,才真。它實際上在onDrawerOpened中設置。正如你可以看到你的初始mDrawerLayout.openDrawer(mFragmentContainerView);setDrawerListener調用之前被調用,所以最初的onDrawerOpened不會被調用,只有在用戶手動打開後纔會調用。

+0

就是這樣,沒有想到DrawerListener。感謝您的時間。 – natario

相關問題