android - 在 AndroidViewModel 中获取 FragmentManager

标签 android android-fragments kotlin fragmentmanager android-architecture-components

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

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

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


问题:有没有办法在AndroidViewModel中获取FragmentManager而不显式传递它?

最佳答案

我认为简短的回答是“不,没有办法”,因为Application 上下文不知道FragmentManager

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

另一个问题是,为什么您的 ViewModel 中需要一个 FragmentManager 实例?最有可能的是,您应该将与 View 相关的内容委托(delegate)给 ViewModel 以外的其他单元来处理(例如,ActivityFragment)。请记住,此 ViewModel 将在配置更改后保留,因此如果您在 ViewModel 中保留对 FragmentManager 的引用,您d 会泄露您的 Activity 实例。

关于android - 在 AndroidViewModel 中获取 FragmentManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44565431/

相关文章:

android - 检测 DialogFragment 中的用户不活动并在一段时间后注销

android - fragment 内的 QR 扫描器

unit-testing - 如何在 Kotlin 上测试数据类?

未调用 Android MotionLayout 转换监听器

kotlin - Kotlin 中的 IntArray 与 Array<Int>

java - 当从另一个 Activity 中按下排序按钮时,Android 中的 RecyclerView 变为空白

java - 为什么不读取第二行?

安卓。通过主页单击捕获应用程序退出

android - 将 viewModel 注入(inject)@Composable

android - 如何在 fragment 中将 ProgressDialog 与 webview 一起使用