如何知道 `navController.popBackStack()` 何时被调用?

How to know when `navController.popBackStack()` was called?

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

  navController.popBackStack()

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

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

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

如果您使用 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 被销毁之前不会被销毁。