Подтвердить что ты не робот

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

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

Также внимательно проверьте, если пользовательская тема 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>