2013-07-24 6 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:displayOptions에서 showHome를 추가 피하기 위해이 찾고 있습니까 또는 여기에 대한 답을 찾고 온 사람들을 위해

<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

새로운 최상위 답변이어야합니다. –