如何在我的 Activity 中监听 Fragment 变化?

时间:2021-05-25 08:43:07

标签: java android kotlin android-fragments

我有一个基于意图打开 Fragment1 或 Fragment2 的活动。

如果用户在 Fragment1 中,则在完成某些操作后的活动中,我将片段替换为 Fragment2,甚至可以直接从 Fragment1 完成。

对于每个 Fragment,我必须更改我的 BottomAppBar 中的项目,直到我进入 Activity 我都没有问题,因为我只制作了一个函数,它根据传入的值更改 bottomAppBar 项目。

问题在于直接从片段调用 .replace 时。

所以我想是否可以设置一个“FragmentListener”来监听我的 Activity 中的片段变化并从中调用该函数..

我的函数如下所示:

private fun changeBottomBar(corpo: Boolean = false) {
    if (corpo) {
        binding.bottomAppBar.navigationIcon = ContextCompat.getDrawable(
            this,
            R.drawable.ic_baseline_menu_24
        )
        binding.bottomAppBar.menu.findItem(R.id.filter).isVisible = false
        binding.bottomSheetTestata.titleBottomSheet.text = "Modifica Documento"
        bottomSheetTestataBehavior.state = BottomSheetBehavior.STATE_COLLAPSED
        binding.bottomAppBar.menu.findItem(R.id.testata).isVisible = tipo != "Etichette"
    }else {
        binding.bottomAppBar.navigationIcon = null
        binding.bottomAppBar.menu?.findItem(R.id.testata)?.isVisible = false
        binding.bottomAppBar.menu?.findItem(R.id.filter)?.isVisible = true
        binding.bottomSheetTestata.titleBottomSheet.text = "Nuovo Documento"
        clearTestata()
        bottomSheetBehavior.state = BottomSheetBehavior.STATE_COLLAPSED
    }
}

并且我为每个 .replace 调用它,如果 Fragment 是 Fragment2 我传递给它 corpo = true

1 个答案:

答案 0 :(得分:1)

您可以使用 EventBus 开源库订阅和发布事件。

https://greenrobot.org/eventbus/

发布活动

 //In fragment
 EventBus.getDefault().post(new MessageEvent());

用于订阅活动中的事件

//In Activity
@Subscribe(threadMode = ThreadMode.MAIN)  
public void onMessageEvent(MessageEvent event) {/* Do something */};

为事件定义自定义模型类

public static class MessageEvent { /* Additional fields if needed */ }