首页 > 解决方案 > 如何知道何时调用了`navController.popBackStack()`?

问题描述

我在代码中的某个点弹出导航控制器上的后台堆栈-

  navController.popBackStack()

将后续片段添加到后台堆栈的片段需要准确知道该片段何时弹出,以便触发其后的代码。

我如何让第一个片段知道它?

我考虑过添加回调作为参数,但我怀疑这是一个好习惯。

标签: androidandroid-navigationfragment-backstack

解决方案


如果您使用Koin,您可以执行以下操作:

class MyActivity : AppCompatActivity(){

// Lazy inject MyViewModel
val model : MySharedViewModelby sharedViewModel()

override fun onCreate() {
    super.onCreate()

model.isFragmentPopped.observe(this, Observe{
    if(it){
            doSomething()
          }
    }    
}
}

分段:

class MyFragment : Fragment(){

// Lazy inject MyViewModel
val model : MySharedViewModel by sharedViewModel()

override fun onCreate() {
    super.onCreate()

    var fragmentX = model.isFragmentXPopped
}

fun backstackPopped{
    model.fragmentPopped()
    navController.popBackStack()
}
}

视图模型:

var _isFragmentPopped = MutableLiveData<Boolean>(false)
val isFragmentPopped : LiveData<Boolean>
get = _isFragmentPopped

fun fragmentPopped(){
    _isFragmentPopped.value = true
}

请记住,您应该使 sharedViewModel 尽可能小,因为它们在 Activity 被销毁之前不会被销毁。


推荐阅读