如何知道何时调用了`navController.popBackStack()`?
Posted
技术标签:
【中文标题】如何知道何时调用了`navController.popBackStack()`?【英文标题】:How to know when `navController.popBackStack()` was called? 【发布时间】:2020-11-25 08:49:21 【问题描述】:我在代码中的某个位置弹出导航控制器上的后台堆栈 -
navController.popBackStack()
将后续片段添加到后台堆栈的片段需要准确知道该片段何时弹出,以便触发之后的代码。
如何让第一个片段知道它?
我考虑过添加回调作为参数,但我怀疑这是一个好习惯。
【问题讨论】:
您是否考虑过在弹出的片段和活动之间共享 ViewModel?这可以工作 你有如何实现这样的例子吗? 【参考方案1】:如果您使用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()`?的主要内容,如果未能解决你的问题,请参考以下文章
如何知道 jquery $.get ajax 调用何时完成?
如何使 libcurl C++ 调用超时和/或知道调用中何时发生超时