【问题标题】:Get current fragment displayed in FragmentContainerView from MainActivity从 MainActivity 获取 FragmentContainerView 中显示的当前片段
【发布时间】:2022-01-04 03:17:36
【问题描述】:

我正在使用导航组件,它使用findNavController().navigate() 在片段之间导航。我想从MainActivity 中检索FragmentContainerView 中当前显示的片段,因为我想修改“编辑”按钮setOnClickListener 功能以执行“保存”功能(我已经知道如何将文本从编辑更改为保存)它检查当前显示的片段并相应地更改setOnClickListener 函数。所以在那个特定的片段中,它将执行“保存”功能。但是如何从MainActivity获取当前显示的片段呢?

我看到了很多其他解决方案,但他们都在使用FragmentTransaction,或者他们只是显示了获取当前片段的代码,但他们没有显示MainActivity 的哪个部分将启动获取当前片段的代码。有什么帮助吗?我正在使用 Kotlin。

【问题讨论】:

  • 你的意思是“你怎么知道当前的片段是什么,因为我想根据我所在的片段来改变我的活动的 UI?”或者你是说你实际上是什么访问片段本身来调用它的方法等等?请说明您的编辑/保存按钮如何与您的活动和片段相关。
  • @ianhanniballake 我正在考虑做一个 if-else 语句来检查当前片段,if(editFragment), button.setOnClickListener{code for edit}, else if(saveFragment), button.setOnClickListener(code for save) 所以我需要在我的活动中知道片段才能执行此操作。或者有没有其他方法可以实现这一目标?因为我只实现了一个 Activity,并且“编辑/保存”在 Activity 中。

标签: android android-fragments android-architecture-navigation


【解决方案1】:

您可以将OnDestinationChangedListener 添加到您内部的NavController MainActivity

navController.addOnDestinationChangedListener { _, destination, _ ->
   if(destination.id == R.id.your_savable_fragment) {
       button.text = "Save"
       //....
   }
   if(destination.id == R.id.your_editable_fragment) {
       button.text = "Edit"
       //....
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多