【问题标题】:ActionBar Back button opens drawer instead of going backActionBar 后退按钮打开抽屉而不是返回
【发布时间】:2018-05-03 13:22:49
【问题描述】:

在我的应用程序中,我遇到了这样的问题。请注意,我正在处理片段,并且我也有抽屉。

这是我的 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);

【问题讨论】:

    标签: java android android-actionbar fragment


    【解决方案1】:

    添加到您的活动中

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

    下载Back Arrow

    然后根据需要从片段中调用

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

    【讨论】:

    • 该代码对我不起作用,可能是因为我覆盖了onOptionsItemSelected。这就是为什么我将toogle.setToolbarNavigationClickListener 中的所有内容粘贴到我的onOptionsItemSelected
    猜你喜欢
    • 1970-01-01
    • 2019-12-19
    • 2020-05-18
    • 2015-05-17
    • 2016-12-05
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    相关资源
    最近更新 更多