【问题标题】:Back button not displaying using navigation view and toolbar使用导航视图和工具栏不显示后退按钮
【发布时间】:2015-07-09 18:58:28
【问题描述】:

我有一个具有以下层次结构的应用程序:

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

我正在尝试从设计支持库中实现导航视图,但无法让工具栏上的实际导航正常工作。

这里是主活动工具栏:

这是从主活动导航到那里后的 ViewPagerFragment,注意没有返回按钮...

这是所需的工具栏:

我正在使用以下代码添加片段:

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

下面是activity启动相关的代码:

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

点击设备上的硬件后退按钮可以正确导航回来。我似乎无法让后退箭头显示在抽屉切换开关上......有什么建议吗?

【问题讨论】:

  • 两个按钮靠得很近是很糟糕的设计。 DrawerLayout 属于你的根 Activity,那么你打开的任何 Activity 都无法访问抽屉,而是有返回按钮返回根。
  • 我认为您误解了我的要求。工具栏确实支持内置作为操作栏并显示汉堡包(用于导航抽屉打开)或后退按钮图标。在我切换到使用 android 设计支持库的导航视图之前,一切都以这种方式工作,但现在我已经切换工具栏不会像以前那样显示后退按钮。
  • 是的,它可以显示抽屉菜单或返回按钮。我不认为你可以两者兼得。如果你有一个导航抽屉,那么你不能有后退按钮。否则,除非您明确控制活动中的图标和操作,否则工具栏应该如何知道要执行的操作。你在找什么?抽屉或后退按钮或控制两者的方法?
  • 我更新了问题,我从不希望两个按钮同时出现 - 我不确定这是如何从问题中收集到的。当 backstack 中有碎片时,请参阅新附加的图片以获得所需的状态。
  • @jyanks 我面临着完全相同的问题,但找不到解决方案。你能帮我提示一下这里的一些代码吗?

标签: android navigation androiddesignsupport


【解决方案1】:

要禁用抽屉式导航图标并改为显示不同的图标,您需要在您的ActionBarDrawerToggle 上调用setDrawerIndicatorEnabled(false)

您可能还需要调用setHomeAsUpIndicator() 来指定要使用的图标,而不是“汉堡”图标。

【讨论】:

    【解决方案2】:

    您是否尝试过到达 Activity 的 ActionBar ?

    在 onViewCreated 中:

    Toolbar mToolbar = (Toolbar) view.findViewById(R.id.toolbar);
    ((Activity) getActivity()).setSupportActionBar(mToolbar);
    ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    

    【讨论】:

    • 嗨@guillaume_fr,该代码在创建的主要活动调用中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多