Android DrawerLayout не показывает значок правильного индикатора

Я пытаюсь использовать новый DrawerLayout для списка. Проблема заключается в том, что я установил прослушиватель ящика, индикатор на панели действий по-прежнему остается значком стрелки, а не значком 3 строки, который я намереваюсь нарисовать. Ниже приведена функция OnCreate:

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(); } 

Solutions Collecting From Web of "Android DrawerLayout не показывает значок правильного индикатора"

Вам нужно syncState() вашего объекта ActionBarDrawerToggle из onPostCreate()

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

Для тех, кто ищет это или пришел сюда в поисках ответа: вы должны использовать 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 } }; 

Это прекрасно работает и имеет анимацию, которая потрясает!

Значок, который вы используете, называется «ic_navigation_drawer». Вы можете проверить, является ли он правильным, потому что значок, который Google предлагает в официальном руководстве ( http://developer.android.com/training/implementing-navigation/nav-drawer.html ), называется «ic_drawer».

Также проверьте тщательно, если пользовательская тема ActionBar определена в вашем проекте в файле style.xml с условием android:displayOptions=showTitle . Как это:

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

И он может испортить индикатор ящика. Чтобы избежать этого, добавьте showHome в android:displayOptions :

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