返回后更新导航抽屉的选定状态

2024-01-27

后按后处理导航抽屉的选定状态的正确方法是什么?

我有一个带有 n 个条目的导航抽屉(在列表视图中),就像 Android Studio 中的 SDK 示例一样。 当我单击导航抽屉条目时,我希望将它们添加到后堆栈中,以便我可以返回到它们。

在 onNavigationDrawerItemSelected(int pos) 我有

        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        if (position == 0) {
            transaction.replace(R.id.container, new FragmentA());
        } else if (position == 1) {
            transaction.replace(R.id.container, new FragmentB());
        } else {
            transaction.replace(R.id.container, new FragmentC());
        }
        transaction.addToBackStack(null);
        transaction.commit();

当我单击抽屉中的第二个条目时,B 被选中并替换 A。如果我随后单击后退按钮,片段 A 会再次显示,但 B 仍然在导航抽屉中被选中。

按回键后如何更新抽屉的选择状态?

不知何故,我需要调用 mDrawerListView.setItemChecked(position, true);或NavigationDrawerFragment.selectItem(int位置)。但到哪个位置呢?我怎么记得它?

用 onBackPressed 拦截?

@Override
    public void onBackPressed() {}

但我如何知道哪个片段再次处于活动状态?以及对应哪个位置。

有没有一些我看不见的简单解决方案?看来,将 back 与导航抽屉结合使用并更新选择状态是一种标准模式。


该模式在实现片段的后退导航 http://developer.android.com/training/implementing-navigation/temporal.html#back-fragments“正确的后退导航”文档部分。

如果您的应用程序更新其他用户界面元素以反映 片段的当前状态,例如操作栏,请记住 当您提交事务时更新 UI。你应该更新 除了当返回堆栈发生变化后,您的用户界面 您提交交易。您可以聆听FragmentTransaction通过设置恢复FragmentManager.OnBackStackChangedListener:

getSupportFragmentManager().addOnBackStackChangedListener(
    new FragmentManager.OnBackStackChangedListener() {
        public void onBackStackChanged() {
            // Update your UI here.
        }
    });

这将是刷新导航抽屉中当前选项的正确位置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

返回后更新导航抽屉的选定状态 的相关文章

随机推荐

  • 使用 NSBezierPath addClip - 如何反转剪辑

    使用 NSBezierPath addClip 仅将绘图限制在用于剪切的路径内部 我想做相反的事情 只在外面画 void drawRect NSRect dirtyRect NSBezierPath dontDrawInThis We wa
  • php中关闭数据库连接的使用

    我总是假设关闭数据库连接始终是一个好习惯 无论数据库 ORM如何 例如 mysql close Propel close 等 参考我的另一篇question https stackoverflow com questions 1236542
  • vue-class-component :调用类方法时出现 TS2339

    我正在使用 vue cli service 构建我的 vuejs 应用程序 构建成功 但在 webstorm IDE 中 我收到一些 TS2339 错误 测试 vue
  • 如何更改 PHP 用于记录到文件的默认时间戳?

    在 php ini 中 error log php errors log So all error log 调用进入文件php errors log 每行前面都有时间戳 例如 17 Jan 2012 18 05 04 是否可以修改该时间戳
  • WPF 窗口中的透明 PNG

    我尝试将具有透明度的 PNG 图像应用到整个窗口 但窗口始终是白色的 有什么线索可以看到 PNG 的透明度吗 谢谢你 C public SplashScreen InitializeComponent var myBrush new Ima
  • 如果默认值不存在则后备背景图像

    我想将图像设置为背景 但图像名称可能是bg png or bg jpg 如果默认背景不存在 是否有任何非 javascript 方法可以创建替代图像的后备 body background url bg png background size
  • C# Json 将任何动态对象转换为键值对

    我正在编写一个工具 它将获取入站 Json 对象 并将其转换为 键值记录 有时可能称为扁平化 目的是避免工具在获取非常大或非常嵌套的 Json 对象时崩溃 因此我想避免递归 一个示例对象可能像这样 如下 包含嵌套数组 空值 你能想到的任何合
  • 在wxPHP中更新属性时如何刷新wxAuiManager窗格?

    我设置了一个简单的wxAuiManager系统包含八个文本控件 每个控件都设置为一个窗格 全部围绕一个中央静态控件排列 我有两个分别捕捉到顶部 左侧 右侧和底部窗格方向 这部分工作正常 我现在想修改每个窗格的属性 我认为可以通过重置关联的来
  • 使用 Fetch API 递归返回分页输出

    Summary 我想使用 JavaScript 的 Fetch API 递归地将分页输出整理到数组中 从 Promise 开始 我认为 async await 函数会更合适 Attempt 这是我的方法 global fetch requi
  • 为什么 Windows 上的 strftime() 返回 false? (我没有使用%e)

    这是我的代码 var dump strftime m d Y l M S time echo br var dump strftime Y d m H M S time 第一行返回 false 第三行返回预期的字符串 2012 10 09
  • 计算 NYSE 交易日的函数

    希望有人可以提供一个给定日期的函数 它将返回纽约证券交易所当月的交易日 如果考虑到假期 那就是额外的好处 如果没有 我也不太担心 提前致谢 我的个人包中有一个函数 名为TradingDates使用假期的 日历从timeDate http c
  • 需要帮助修复近似 pi 的算法

    我正在尝试为近似的算法编写 C 代码pi 它应该得到一个立方体的体积和该立方体内部球体的体积 球体的半径是立方体边长的 1 2 然后我应该将立方体的体积除以球体的体积并乘以 6 以获得 pi 它正在工作 但它在应该获得卷的部分做了一些奇怪的
  • IPython 在打印时忽略对象的 __repr__

    我写了一个子类defaultdict 我给了它自己的 repr 方法以便在交互式会话中自定义其外观 在常规 Python 会话中 这会按预期工作 Python 3 5 0 default Sep 20 2015 11 28 25 GCC 5
  • 在 C# 中,如何像 google calc 一样实现模数?

    我有一个代表形状的类 Shape 类有一个名为 Angle 的属性 我希望此属性的设置器自动将值包装到范围 0 359 中 不幸的是 一个简单的 Angle value 360 仅适用于正数 在 C 中 40 360 40 谷歌计算器可以做
  • 如何使用 FileHelpers 库将大型 SQL Server 表导出到 CSV 文件?

    我希望使用 C 和 FileHelpers 库将大型 SQL Server 表导出到 CSV 文件中 我也可以考虑 C 和 bcp 但我认为 FileHelpers 会比 bcp 更灵活 速度不是特殊要求 OutOfMemoryExcept
  • 开发和测试环境的不同 DateTimeFormat

    在我的 ASP NET MVC 项目中的 global asax cs 的 Application BeginRequest 方法中有代码 Thread CurrentThread CurrentCulture CultureInfo Cr
  • 调用带有太多参数的函数时的 GCC 行为

    我刚刚注意到 GCC 的一个行为对我来说似乎很奇怪 没有与其他编译器进行检查 如果我编译这段代码 include
  • sparql 精确匹配正则表达式

    我使用以下 sparql 查询从 dbpedia 中提取与特定信息框匹配的页面 PREFIX dbo
  • 共享会话与默认配置的会话

    两者有什么区别session以这两种不同方式创建的对象 NSURLSession session NSURLSession sharedSession and NSURLSessionConfiguration configuration
  • 返回后更新导航抽屉的选定状态

    后按后处理导航抽屉的选定状态的正确方法是什么 我有一个带有 n 个条目的导航抽屉 在列表视图中 就像 Android Studio 中的 SDK 示例一样 当我单击导航抽屉条目时 我希望将它们添加到后堆栈中 以便我可以返回到它们 在 onN