Кнопка «Назад» в ActionBar открывает ящик вместо возврата - PullRequest
0 голосов
/ 03 мая 2018

У меня в приложении такая проблема. Обратите внимание, что я работаю с фрагментами, и у меня тоже есть ящик.

Это метод в моей MainActivity для открытия / закрытия ящика.

    public void drawerInit() {

    toolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
    setSupportActionBar(toolbar);
    drawer = (DrawerLayout) findViewById(R.id.drawer);
    view = findViewById(R.id.mainView);

    toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) {

        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {
            super.onDrawerSlide(drawerView, slideOffset);
            float moveFactor = (drawerView.getWidth() * slideOffset);
            view.setTranslationX(moveFactor);
        }

        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);
        }
    };

    drawer.addDrawerListener(toggle);
    toggle.syncState();
}

Пример У меня есть 3 фрагмента (F1, F2, F3). F1 - мой основной фрагмент, где я могу открыть и закрыть ящик. Когда я открываю фрагменты F2 или F3, мне нужно поменять иконку в ящике на стрелку назад. Я делаю эту часть успешно, но проблема в том, что, когда я нажимаю на стрелку назад, открывается навигационный ящик вместо возврата назад. Так как я могу исправить эту часть?

Здесь часть, где я меняю иконку на стрелку назад во фрагменте.

((AppCompatActivity) getActivity()).getSupportActionBar().show();
((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayShowTitleEnabled(false);
((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
((AppCompatActivity) getActivity()).getSupportActionBar().setHomeButtonEnabled(true);

1 Ответ

0 голосов
/ 03 мая 2018

Добавить в свою деятельность

    public void crateMenuButton(){
        toggle.setDrawerIndicatorEnabled(true);
        if(toolbarDrawable == null) {
            toolbarDrawable = toolbar.getNavigationIcon();
        }
        toolbar.setNavigationIcon(toolbarDrawable);
        invalidateOptionsMenu();
        toggle.syncState();
    }

    public void createBackButton() {
        toggle.setDrawerIndicatorEnabled(false);
        toggle.setToolbarNavigationClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //if the drawerToggle is disabled, fall off to the home button action
                if (!toggle.isDrawerIndicatorEnabled()) {
                    // pop fragment here
                    FragmentManager fragmentManager = getSupportFragmentManager();
                    if (fragmentManager.getBackStackEntryCount() > 0) {
                        fragmentManager.popBackStack();
                    }
                } else {
                    if (drawerLayout.isDrawerOpen(navigationView)) {
                        drawerLayout.closeDrawer(navigationView);
                    } else {
                        drawerLayout.openDrawer(navigationView);
                    }
                }
            }
        });
        toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_back_white));
    }

Скачать Стрелка назад

Тогда звоните из своего фрагмента, как вам нужно

((YourActivity) getActivity()).createBackButton();
OR
((YourActivity) getActivity()).crateMenuButton();
...