簡體   English   中英

如何在我的 Activity 中收聽 Fragment 變化?

[英]How can i listen for Fragment change in my Activity?

我有一個基於意圖打開 Fragment1 或 Fragment2 的活動。

如果用戶在 Fragment1 中完成某些事情后的活動,我將 Fragment2 替換為 Fragment2,甚至可以直接從 Fragment1 完成。

對於每個 Fragment,我必須更改我的 BottomAppBar 中的項目,直到我處於 Activity 中,我對它沒有任何問題,因為我只做了一個 function,它根據傳入的值更改 bottomAppBar 項目。

問題是當.replace直接從片段中調用時。

所以我堅持是否可以設置一個“FragmentListener”來監聽我的Activity中的片段變化並從中調用function..

我的 function 看起來像這樣:

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 */};

為事件定義自定義 model class

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM