首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >导航抽屉-汉堡菜单有效,但向后箭头可打开抽屉

导航抽屉-汉堡菜单有效,但向后箭头可打开抽屉
EN

Stack Overflow用户
提问于 2020-08-21 22:56:42
回答 1查看 64关注 0票数 0

我正在使用导航抽屉,汉堡菜单显示在所有右侧屏幕上,但在其他片段上,当我单击后退箭头时,当我想要返回到堆栈中的上一个屏幕时,导航抽屉会打开。

如何更改行为,以便在显示箭头时捕获用户单击箭头的行为?

我正在使用带有片段的导航抽屉。在主活动中,我使用AppBarConfiguration设置顶级目的地:

代码语言:javascript
运行
复制
AppBarConfiguration config = new AppBarConfiguration.Builder(topLevelDestinations)
                .setDrawerLayout(drawerLayout)
                .build();

    NavigationUI.setupActionBarWithNavController(this, navController, config);
    NavigationUI.setupWithNavController(navView, navController);
    
    navView.setNavigationItemSelectedListener(this);

我正在捕获来自顶级目的地的所有选择,并适当地导航:

代码语言:javascript
运行
复制
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    item.setChecked(true);

    drawerLayout.closeDrawers();

    int id = item.getItemId();

    switch (id) {
      ...
    }
    drawerLayout.closeDrawer(GravityCompat.START);
    return true;
}
EN

回答 1

Stack Overflow用户

发布于 2020-08-22 01:41:28

getFragmentManager().popBackStack()方法可能就是您正在寻找的方法。以下是要放置用于活动的示例代码片段:

代码语言:javascript
运行
复制
@Override
public void onBackPressed(){
    FragmentManager fm = getFragmentManager();
    if (fm.getBackStackEntryCount() > 0) {
        Log.i("MainActivity", "popping backstack");
        fm.popBackStack();
    } else {
        Log.i("MainActivity", "nothing on backstack, calling super");
        super.onBackPressed();  
    }
}

如果是片段,尝试调用片段,如下所示:

代码语言:javascript
运行
复制
getSupportFragmentManager().beginTransaction()
    .add(detailFragment, "detail") // Add this transaction to the back stack
    .addToBackStack(null)
    .commit();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63525227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档