Кнопка «Назад» не отображается при использовании представления навигации и панели инструментов

У меня есть приложение со следующей иерархией:

MainActivity (Shows list of dates) 
    | 
ViewPagerFragment (Shows list of children for those dates)
    | 
ChildFragment (Detail View)

Я пытаюсь реализовать представление навигации из библиотеки поддержки дизайна, но у меня возникают проблемы с реальной навигацией на панели инструментов.

Вот панель инструментов Main Activity:

навигация по основной деятельности

Вот ViewPagerFragment после перехода туда из основного действия, обратите внимание, что кнопки «Назад» нет...

навигация по детской активности

Вот нужная панель инструментов: нужная панель инструментов

Я добавляю фрагменты, используя следующий код:

    getSupportFragmentManager()
            .beginTransaction()
            .replace(R.id.content_frame, fragment, fragment.getClass().getName())
            .addToBackStack(fragment.getClass().getName())
            .commitAllowingStateLoss();

Вот код, связанный с запуском активности:

protected void setupActionBar() {
    setSupportActionBar(toolbar);

    ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

И моя настройка ящика навигации:

protected void setupNavigationDrawer() {
    navigationView.setNavigationItemSelectedListener(this);
    actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawerLayout.setDrawerListener(actionBarDrawerToggle);
    actionBarDrawerToggle.syncState();
}

Нажатие аппаратной кнопки «Назад» на устройстве обеспечивает правильный переход назад. Я просто не могу отобразить стрелку назад на переключателе ящика... Есть предложения?


person jyanks    schedule 09.07.2015    source источник
comment
Было бы плохо иметь две кнопки так близко друг к другу. DrawerLayout принадлежит вашей корневой активности, тогда любая открываемая вами активность не будет иметь доступа к ящику, но вместо этого будет иметь кнопку «Назад», чтобы вернуться к корню.   -  person Phiat    schedule 09.07.2015
comment
Я думаю, что вы неправильно понимаете, о чем я спрашиваю. Панель инструментов имеет встроенную поддержку, которая действует как панель действий и отображает либо гамбургер (для открытия навигационного ящика), либо значок кнопки «Назад». Все работало таким образом до того, как я переключился на использование представления навигации библиотеки поддержки дизайна Android, но теперь, когда я переключил панель инструментов, не будет отображаться кнопка «Назад», как раньше.   -  person jyanks    schedule 09.07.2015
comment
Да, он может отображать ЛИБО меню ящика или кнопку «Назад». Я не думаю, что вы можете иметь оба. Если у вас есть ящик навигации, у вас не может быть кнопки «Назад». В противном случае, как панель инструментов должна знать, какое действие предпринять, если вы явно не контролируете значок и действие в своих действиях. Что вы здесь ищете? ящик или кнопку «Назад» или способ управлять обоими?   -  person doubleA    schedule 09.07.2015
comment
Я обновил вопрос, я никогда не хотел, чтобы обе кнопки появлялись одновременно - я не уверен, как это было извлечено из вопроса. См. новое прикрепленное изображение для желаемого состояния, когда в стеке есть фрагменты.   -  person jyanks    schedule 09.07.2015
comment
@jyanks Я столкнулся с точно такой же проблемой и не могу найти решение. Не могли бы вы помочь мне, намекнув на какой-то код здесь?   -  person Haresh Chaudhary    schedule 14.02.2016
comment
Вы должны посмотреть на ответ @tanis-7x ниже. Это то, что исправило это для меня.   -  person jyanks    schedule 16.02.2016


Ответы (2)


Чтобы отключить значок панели навигации и вместо него отобразить другой значок, необходимо вызвать setDrawerIndicatorEnabled(false) на вашем ActionBarDrawerToggle.

Вам также может понадобиться вызвать setHomeAsUpIndicator() чтобы указать значок, который вы хотите использовать вместо значка «гамбургер».

person Bryan Herbst    schedule 10.07.2015

Вы пытались добраться до ActionBar Activity ?

в onViewCreated:

Toolbar mToolbar = (Toolbar) view.findViewById(R.id.toolbar);
((Activity) getActivity()).setSupportActionBar(mToolbar);
((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
person guillaume_fr    schedule 10.07.2015
comment
Привет @guillaume_fr, этот код находится в основном вызове действия при создании. - person jyanks; 10.07.2015