当前位置: 首页 > 知识库问答 >
问题:

带背箭头的Android导航抽屉

贺英悟
2023-03-14

我有一个在几个活动之间过渡的导航抽屉。在每个活动中,我都有一个基础片段,它可能启动其他片段。我希望导航抽屉切换图标显示时,我在基础片段,但当我添加另一个片段,我需要显示后箭头。

我一直在遵循riwnodennyk在的示例:使用片段时在Android导航抽屉图像和上插入符号之间切换

但这对我不起作用。箭头确实会出现,但我无法单击它。当点击它时,什么也不会发生。

非碱基片段中的OptionsMenuListner:

    @Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Get item selected and deal with it
    Log.d("HERE", "HERHEHREHREHddddddREe");


    return false;
}

我确实调用setHasOptionsMenu(真);在碎片里。

导航片段的相关部分:

 public void setup(int fragmentId, DrawerLayout drawerLayout, Toolbar toolbar) {
    mFragmentContainerView = getActivity().findViewById(fragmentId);
    mDrawerLayout = drawerLayout;


    mActionBarDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) {
        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);
            setActionBarArrowDependingOnFragmentsBackStack();

            if (!isAdded()) return;
            getActivity().invalidateOptionsMenu();

            if (mCallbacks != null && nextSelectedPosition != mCurrentSelectedPosition) {
                mCurrentSelectedPosition = nextSelectedPosition;
                mCallbacks.onNavigationDrawerItemSelected(nextSelectedPosition);
            }
        }

        @Override
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            setDrawerIndicatorEnabled(true);
            if (!isAdded()) return;

            getActivity().invalidateOptionsMenu();
        }
    };

    mActionBarDrawerToggle.setHomeAsUpIndicator(R.drawable.appbar_back);


    mDrawerLayout.post(new Runnable() {
        @Override
        public void run() {
            mActionBarDrawerToggle.syncState();
        }
    });

    mDrawerLayout.setDrawerListener(mActionBarDrawerToggle);
    ((BaseNavigationActivity)getActivity()).getSupportFragmentManager().addOnBackStackChangedListener(mOnBackStackChangedListener);
}

private FragmentManager.OnBackStackChangedListener
        mOnBackStackChangedListener = new FragmentManager.OnBackStackChangedListener() {
    @Override
    public void onBackStackChanged() {
        Log.d("TAG", "Back stack was called");
        setActionBarArrowDependingOnFragmentsBackStack();
    }
};

private void setActionBarArrowDependingOnFragmentsBackStack() {
    int backStackEntryCount =
            ((BaseNavigationActivity)getActivity()).getSupportFragmentManager().getBackStackEntryCount();
    Log.d("TEST", "Back Stack Count: " + backStackEntryCount);
    mActionBarDrawerToggle.setDrawerIndicatorEnabled(backStackEntryCount == 0);
}

共有1个答案

牟稳
2023-03-14

下面的方法对我有效。

private boolean mToolBarNavigationListenerIsRegistered = false;

public void enableButton(boolean enable) {
    if (enable) {
        mDrawableToggle.setDrawerIndicatorEnabled(false);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        if (!mToolBarNavigationListenerIsRegistered) {
            mDrawableToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onBackPressed();
                }
            });

            mToolBarNavigationListenerIsRegistered = true;
        }

    } else {
        getSupportActionBar().setDisplayHomeAsUpEnabled(false);
        mDrawableToggle.setDrawerIndicatorEnabled(true);
        mDrawableToggle.setToolbarNavigationClickListener(null);
        mToolBarNavigationListenerIsRegistered = false;
    }
}here

在调用此方法时,如果您将true作为参数传递,它将显示一个向后箭头,并作为一个向后按,通过在其中传递false,它将显示导航抽屉图标并打开导航抽屉。

 类似资料:
  • 我实现了双抽屉布局。我还建立了一个ActionBarDrawerToggle。 我的问题是当我点击主页按钮时,我的左抽屉打开并播放动画。打开时我的右抽屉也显示抽屉打开动画。这会导致与主页图标奇怪的同步问题,即使使用mDrawerToggle.sync状态(); 我要做的是拦截打开左侧抽屉的home button click事件,以便测试哪个抽屉打开,然后适当地关闭那个抽屉。有没有办法在主页图标上设

  • 有人能告诉我如何创建活动到这个主要活动,导航抽屉将看到在所有他们?我需要使用这个特定的MainActivity代码。我不需要使用碎片,只要3个简单的活动将添加到这个抽屉。 NavDrawer布局:

  • 在阅读了下面的问题后,我仍然不知道如何用一个简单的后退箭头来替换导航抽屉的菜单,该箭头可以让我的用户返回到上一个片段。 到目前为止,我可以隐藏按钮以访问抽屉,如下所示: 我如何在它的位置添加后箭头?

  • 我有一个类似Android Studios的应用程序导航抽屉活动: 我的活动使用Android架构导航组件 到目前为止,一切正常。返回时问题开始: 让我们想象我从“家”——片段甲——导航 Android Studio示例正确运行:C- 我的实现没有:它只是弹出后台C- 我该怎么弥补? 缩小主布局: 导航图: 与我的主要活动onCreate相关的所有导航:

  • 将android jetpack导航与工具栏和抽屉结合使用是因为根目的地有一个汉堡包菜单图标(用于切换抽屉),在子片段中有一个后退按钮。 在后箭头上打开/关闭子片段时,也会出现动画。 现在的问题是:在我的一个孩子片段中,我设置了一个自定义导航返回按钮 这同样有效,但在结束时出现了一个“小故障”,其中 自定义图标消失 问题: 这个“故障”是一个错误,还是我必须调用setNavigationIcon以

  • 问题内容: 我有一个导航图,该导航图将此片段用作主活动XML中的主页。 我有一个带有菜单的Drawer布局,单击导航抽屉按钮时,我无法设法使导航正常工作(它可以从主要片段工作,但是当我单击Drawer按钮时,不能工作),如果我使用的是旧方法使用:对导航抽屉编程,我的navcontroller丢失了!!我得到类似的错误 navcontroller无法识别目标片段,因为即使不是这种情况,控制器也会看到