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

Отсутствует значок навигации после переключения с ICS ActionBar на панель инструментов Lollipop

У меня есть активность со многими фрагментами, которые используют панель действий и навигационный ящик. У него включен режим "home as up". Я реализовал правильную логику, что только фрагменты верхнего уровня показывают значок переключателя панели действий, а другие фрагменты отображают стрелку. Я достиг этого:

mDrawerToggle.setDrawerIndicatorEnabled(false);
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, mDrawerList);

Теперь старая библиотека поддержки v4 ActionBarDrawerToggle стала устаревшей. Я перешел на версию v7 ​​вместе с новым Toolbar, чтобы получить вид Material Design. После этого, когда ящик открыт, стрелка "вверх" отображается правильно, но когда выполняется вышеупомянутый код, он полностью исчезает.

Является ли это ошибкой в ​​библиотеке поддержки, или мне нужно сделать что-то другое, чтобы показать стрелку "вверх" вместо индикатора ящика?

4b9b3361

Ответ 1

Вы пытались настроить отображаемый индикатор с помощью getV7DrawerToggleDelegate().getThemeUpIndicator () и установить его после отключения индикатора?

Потому что, когда индикатор отключен, ActionBarDrawerToggle пытается установить предыдущий индикатор.

Из ActionBarDrawerToggle источника:

public void setDrawerIndicatorEnabled(boolean enable) {
    if (enable != mDrawerIndicatorEnabled) {
        if (enable) {
            setActionBarUpIndicator((Drawable) mSlider,
                    mDrawerLayout.isDrawerOpen(GravityCompat.START) ?
                            mCloseDrawerContentDescRes : mOpenDrawerContentDescRes);
        } else {
            setActionBarUpIndicator(mHomeAsUpIndicator, 0);
        }
        mDrawerIndicatorEnabled = enable;
    }
}

Edit:

С учетом устаревания ActionBarActivity вы должны использовать getDrawerToggleDelegate().getThemeUpIndicator ()

Ответ 2

Ответ/комментарии Никола Деспотоски и Андрея Новикова совершенно правильны, но я хочу упомянуть, что после замены панели инструментов следующий код:

drawerToggle.setDrawerIndicatorEnabled(false);
drawerToggle.setHomeAsUpIndicator(getV7DrawerToggleDelegate().getThemeUpIndicator());
setSupportActionBar(toolbar);

ваша активность будет получать каждый из событий onOptionsItemsSelected, даже если вы снова включите свой лоток в Google drawerToggle.setDrawerIndicatorEnabled(true); Поэтому вам нужно справиться с этим, я закончил с

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            if (drawerToggle.isDrawerIndicatorEnabled()) {
                return drawerToggle.onOptionsItemSelected(item);
            } else {
                onBackPressed();
                return true;
            }
        default:
            return super.onOptionsItemSelected(item);
    }
}

Ответ 3

Если вы используете AppCompatActivity, вы можете получить значок нужного ящика и задний значок

        if(homeUp)
    {
        getSupportActionBar().setDisplayHomeAsUpEnabled(false);
        mDrawerToggle.setDrawerIndicatorEnabled(false);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });

    }
    else
    {
        mDrawerToggle.setDrawerIndicatorEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        mDrawerToggle.syncState();
    }

Без необходимости getV7DrawerToggleDelegate: D