2013-07-24 9 views
19

新しいDrawerLayoutをリストに使用しようとしています。問題は、私が引き出しのリスナーを設定しても、アクションバーのインジケータは引き続き描く予定の3行のアイコンではなく矢印のアイコンです。 OnCreate関数は次のとおりです。Android DrawerLayoutに正しいインジケータアイコンが表示されない

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_front_page); 

    // Swiping Pager set up 
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

    mViewPager = (ViewPager) findViewById(R.id.pager); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 

    // Sliding Drawer set up 
    mHabitContract = new HabitsContract(this); 
    mDrawerLayout = (DrawerLayout) findViewById(R.id.front_page_layout); 
    mDrawerList = (ListView) findViewById(R.id.habit_list); 
    mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 
    mDrawerList.setAdapter(new HabitAdapter(mHabitContract.GetHabitItems(), this)); 

    // Fixme: Indicator image doesn't show up 
    mDrawerToggle = new ActionBarDrawerToggle(
      this,     /* host Activity */ 
      mDrawerLayout,   /* DrawerLayout object */ 
      R.drawable.ic_navigation_drawer, /* nav drawer image to replace 'Up' caret */ 
      R.string.drawer_open, /* "open drawer" description for accessibility */ 
      R.string.drawer_close /* "close drawer" description for accessibility */ 
    ) { 
     public void onDrawerClosed(View view) { 
      //getActionBar().setTitle(mTitle); 
      invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
     } 

     public void onDrawerOpened(View drawerView) { 
      //getActionBar().setTitle(mDrawerTitle); 
      invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
     } 
    }; 
    mDrawerLayout.setDrawerListener(mDrawerToggle); 

    // Action Bar set up 
    getActionBar().setDisplayHomeAsUpEnabled(true); 
    getActionBar().setHomeButtonEnabled(true); 
    getActionBar().setDisplayShowHomeEnabled(true); 
} 

誰でも手助けできますか?

更新:問題が見つかりました。私はonPostCreate関数を次のように追加しました。今は動作しています。

protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    // Sync the toggle state after onRestoreInstanceState has occurred. 
    mDrawerToggle.syncState(); 
} 
+0

http://www.coderzheaven.com/2013/06/28/navigation-drawer-android/ –

+0

完全に正常に動作するサンプルアプリケーションをダウンロードしました。しかし、私のコードはほぼ同じなので、問題の内容を本当に知ることはできません。 – zhengbli

+0

ダウンロードしたアプリからコードにコードを取得し、必要に応じて変更してください。 –

答えて

35

はカスタムActionBarテーマが条件android:displayOptions=showTitlestyle.xmlファイルでプロジェクトに定義されている場合もcarefulyチェックonPostCreate()

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    // Sync the toggle state after onRestoreInstanceState has occurred. 
    mDrawerToggle.syncState(); 
} 
+1

同じ問題を抱えていた - 簡単に見落とされた – Deminetix

+0

これは受け入れられる回答でなければならない – serenskye

+0

ありがとう!私は問題を解決することができた。 – Ataru

0

使用しているアイコンを「ic_navigation_drawer」といいます。 Googleが公式ガイド(http://developer.android.com/training/implementing-navigation/nav-drawer.html)で提供しているアイコンが「ic_drawer」と呼ばれているため、適切かどうかを確認できます。

+1

私はどちらもうまくいきませんでした。さらに、矢印アイコンをタッチすると、引き出しが開かれません。しかし、onDrawerClosed/onDrawerOpened関数は私のテストで動作します。 – zhengbli

0

からあなたActionBarDrawerToggleオブジェクトのsyncState()呼び出す必要があります。このように:

<style name="OrangeBar" parent="@android:style/Widget.Holo.ActionBar"> 
    <item name="android:displayOptions">showTitle</item> 
    ... 
</style> 

となり、引き出しインジケータを壊す可能性があります。これはandroid:displayOptionsshowHomeを追加しないようにするには:これを検索しているか、ここで答えを探して来た人のために

<item name="android:displayOptions">showHome|showTitle</item> 
3

を:あなたはDrawerToggleのsupport.v7に使用する必要があります。私がそれを使う方法に従う:

drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_opened, R.string.drawer_closed){ 
     public void onDrawerClosed(View view){ 
      //actionBar.setTitle(mTitle); 
      invalidateOptionsMenu(); // crea la llamada para onPrepareOptionsMenu 
     } 
     public void onDrawerOpened(View view){ 
      //actionBar.setTitle(mDrawerTitle); 
      invalidateOptionsMenu(); // crea la llamda para onPrepareOptionsMenu 
     } 
    }; 

これはうまく動作し、アニメーションが岩です!

+0

これが新しいトップアンサーになるはずです –

関連する問題