从MainActivity获取在FragmentContainerView中显示的当前片段

3
我正在使用导航组件,使用findNavController().navigate()在片段之间进行导航。 我想从MainActivity获取当前显示的FragmentContainerView中的片段,因为我想修改“编辑”按钮setOnClickListener函数以执行“保存”函数(我已经知道如何将文本从“编辑”更改为“保存”),其中它检查当前显示的片段并相应地更改setOnClickListener函数。 因此,在特定的片段中,它将执行“保存”功能。 但是,我该如何从MainActivity获取当前显示的片段呢? 我看到很多其他解决方案,但它们都使用FragmentTransaction或仅显示获取当前片段的代码,但是他们没有显示将在哪个部分的MainActivity中启动获取当前片段的代码。 有帮助吗?我正在使用Kotlin。 图片参考:enter image description here

你是想问“如何知道当前的片段是什么,因为我想根据我所在的片段更改我的Activity界面”还是说你实际上想要访问片段本身以调用它的方法等?请解释一下您的编辑/保存按钮与您的活动和片段之间的关系。 - ianhanniballake
@ianhanniballake 我在考虑使用if-else语句来检查当前的片段,如果(editFragment),button.setOnClickListener{编辑代码},否则如果(saveFragment),button.setOnClickListener(保存代码)。因此,我需要知道Activity中的Fragment才能执行此操作。或者还有其他方法可以实现吗?因为我只实现了一个单一的Activity,并且“编辑/保存”在Activity中。 - AhChing11
1个回答

2
您可以在MainActivity中为NavController添加一个OnDestinationChangedListener
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"
       //....
   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,