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

Android/Kotlin替代EventBus postSticky()

戚俊美
2023-03-14

我正在搜索方法替换。它用于将值简单地传递给前一个片段,但问题是,我使用BackStackUtil进行导航,所以只有在返回前以某种方式清除堆栈时,才会在返回时调用方法

前一个片段包含项目列表,当下一个片段可以修改拾取的项目,而另一个片段可以做其他事情时,当这些事件中的每一个都传递给前一个片段时,这就是粘性事件链<应用程序结构不允许我在当前阶段应用协调器模式,而且我不想将包附加到保留在堆栈上的片段<我在寻找解决方案,但找不到任何解决方案。我也不想在一些静态字段或共享引用/数据存储中存储值<我在考虑shared ViewModel,但老实说,我真的不喜欢这个想法,所以如果共享虚拟机是唯一/最好的方式,我希望有任何想法或只是确认一下<你还有其他想法吗?

共有1个答案

柯波峻
2023-03-14

在A片段中,在导航到B片段之前,请先听savedStateHandle:

 findNavController()
      .currentBackStackEntry
      ?.savedStateHandle?.getLiveData<Bundle>("DATA_KEY")
      ?.observe(viewLifecycleOwner) { result ->
        // Result from fragment B
    }

在您的B片段中,在导航返回之前,将数据设置为传递给A片段:

findNavController()
    .previousBackStackEntry
    ?.savedStateHandle
    ?.set("DATA_KEY", result)

您可以使用以下方法删除观察者:

findNavController()
      .currentBackStackEntry
      ?.savedStateHandle?.remove<Bundle>

请注意,这里传递的类型是Bundle(getLiveData中的类型

 类似资料:
  • 自JDK 8以来已被弃用,并将在JDK 10中/已被删除,根据JEP 313和弃用文本,应使用带有标志的代替: 警告:工具计划在下一个主要JDK版本中删除。该工具已被JDK 8中添加到的'-h'选项所取代。建议用户迁移到使用'-h'选项;有关更多信息,请参阅javac手册页。 问题是,对编译后的文件,而操作源文件(即files) 与 Kotlin 和函数配合得很好,因为所有内容最终都被编译为 Ja

  • 问题内容: 另一种选择是允许我填写带有复选框和单选按钮的HTML表单。 我正在创建一个需要用户输入的Android应用程序,并将该数据使用html表单发送到网站,然后将其填写,提交表单并返回以下结果页面。 我已经设法在eclipse中使用HtmlUnit库将数据发送到html表单并检索页面(我在下面发布了Java代码)。 但是,当我将该代码复制到我的Android项目中时,我发现Android不支

  • 目前,Android的EditText在处理大量文本行(10000行)时速度非常慢。这种放缓似乎部分是由于EditText支持跨度,主要是由于EditText正在计算每行的宽度,这非常昂贵。EditText有什么更快的替代品,或者优化它以使其可用的方法吗? 编辑:方法跟踪如下:

  • 允许我填充包含复选框和单选按钮的HTML表单的替代方法。 我已经设法使用eclipse中的HtmlUnit库将数据发送到html表单并检索页面(我已经发布了下面的Java代码)。 然而,当我将这些代码复制到我的Android项目中时,我发现Android不支持HtmlUnit库。 对于Android来说,HtmlUnit还有其他替代方案吗?另一种方法应该能够将文本、复选框、单选按钮填写到Html表

  • 问题内容: 我试图在Android中实现算法AES 128,但是它不起作用,问题是 和 是否存在替代方案? 我的方法: 我看到了其他答案,但是无法实现解决方案。 问题答案: 解 我用解决了我的问题 我将android.util.Base64用于Android 不兼容 / 替换

  • 问题内容: 我想用逗号作为分隔符连接一个ArrayList。我找到了这个答案,指出可以在Java中使用。 但是,当我尝试使用此功能时,Android Studio出现以下错误: 无法解析方法’join(java.lang.String,java.lang.String,java.lang.String,java.lang.String)’ Android Studio是否有一个好的简洁的替代方法(