在 AndroidViewModel 中获取 FragmentManager
Get FragmentManager inside AndroidViewModel
AndroidViewModel
用于访问 Application
上下文。我正在尝试访问 Activity
的 FragmentManager
而不显式传递它:
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
。
FragmentManager
是 FragmentActivity
的子类可能拥有的对象。 Application
不是 FragmentActivity
的子类。
另一个问题是,为什么您的 ViewModel
中需要一个 FragmentManager
实例?很可能你应该委托与视图相关的东西来处理除 ViewModel
之外的其他单元(例如 Activity
、Fragment
)。请记住,此 ViewModel
将在配置更改后保留,因此如果您在 ViewModel
中保留对 FragmentManager
的引用,您将泄漏 Activity
实例.
AndroidViewModel
用于访问 Application
上下文。我正在尝试访问 Activity
的 FragmentManager
而不显式传递它:
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
。
FragmentManager
是 FragmentActivity
的子类可能拥有的对象。 Application
不是 FragmentActivity
的子类。
另一个问题是,为什么您的 ViewModel
中需要一个 FragmentManager
实例?很可能你应该委托与视图相关的东西来处理除 ViewModel
之外的其他单元(例如 Activity
、Fragment
)。请记住,此 ViewModel
将在配置更改后保留,因此如果您在 ViewModel
中保留对 FragmentManager
的引用,您将泄漏 Activity
实例.