在 AndroidViewModel 中获取 FragmentManager

Get FragmentManager inside AndroidViewModel

AndroidViewModel 用于访问 Application 上下文。我正在尝试访问 ActivityFragmentManager 而不显式传递它:

class FooViewModel(app: Application) : AndroidViewModel(app) {
  private val fm = (app.applicationContext as Activity).fragmentManager
  ..
}

出现错误,无法将 Context 转换为 Activity


问题: 有什么方法可以让 FragmentManager 进入 AndroidViewModel 而不显式传递它吗?

我认为简短的回答是 "no, there is no way",因为 Application 上下文不知道 FragmentManager

FragmentManagerFragmentActivity 的子类可能拥有的对象。 Application 不是 FragmentActivity 的子类。

另一个问题是,为什么您的 ViewModel 中需要一个 FragmentManager 实例?很可能你应该委托与视图相关的东西来处理除 ViewModel 之外的其他单元(例如 ActivityFragment)。请记住,此 ViewModel 将在配置更改后保留,因此如果您在 ViewModel 中保留对 FragmentManager 的引用,您将泄漏 Activity实例.