如何知道 `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 被销毁之前不会被销毁。
我在我的代码中的某个点弹出我的导航控制器上的后退堆栈 -
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 被销毁之前不会被销毁。