android - 如何知道何时调用了`navController.popBackStack()`?
问题描述
我在代码中的某个点弹出导航控制器上的后台堆栈-
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 被销毁之前不会被销毁。
推荐阅读
- java - 相同数据应用于所有相同类型的 Bean,同时创建具有不同数据的 bean 列表
- curl - 卷曲不正确的符号
- java - 我可以使用类似于 farbic8 的 spotify 插件配置远程 DOCKER_HOST
- r - 反码函数,处理引号
- android - Socket 和 SSLSocket 在同一个端口上运行
- reactjs - 如何在 package.json 中链接 css:watch 和 babel
- android - 将国家名称转换为 ISO Alpha 2 国家代码
- java - spring-boot 执行器健康检查事件
- android - 如何更改XML文件android studio中的字体
- javascript - 如何在 ng-repat 中保存元素的索引?