我如何监听 Activity 中的 Fragment 变化?
How can i listen for Fragment change in my Activity?
我有一个 Activity,它根据意图打开 Fragment1 或 Fragment2。
从 activity 如果用户在 Fragment1 中完成一些事情后,我将片段替换为 Fragment2,甚至可以直接从 Fragment1 完成。
对于每个片段,我必须更改我的 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
您可以使用 EventBus 开源库来订阅和发布事件。
https://greenrobot.org/eventbus/
发布活动
//In fragment
EventBus.getDefault().post(new MessageEvent());
对于 Activity
中的订阅事件
//In Activity
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {/* Do something */};
为事件
定义自定义模型class
public static class MessageEvent { /* Additional fields if needed */ }
我有一个 Activity,它根据意图打开 Fragment1 或 Fragment2。
从 activity 如果用户在 Fragment1 中完成一些事情后,我将片段替换为 Fragment2,甚至可以直接从 Fragment1 完成。
对于每个片段,我必须更改我的 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
您可以使用 EventBus 开源库来订阅和发布事件。
https://greenrobot.org/eventbus/
发布活动
//In fragment
EventBus.getDefault().post(new MessageEvent());
对于 Activity
中的订阅事件//In Activity
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {/* Do something */};
为事件
定义自定义模型classpublic static class MessageEvent { /* Additional fields if needed */ }