在AndroidViewModel中获取FragmentManager

0le*_*leg 3 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
  ..
}
Run Code Online (Sandbox Code Playgroud)

得到错误,无法投射ContextActivity.


问题:有没有办法进入FragmentManager内部AndroidViewModel而不明确地传递它?

azi*_*ian 6

我认为简短的回答将是"不,没有办法",因为Application背景是没有意识到的FragmentManager.

FragmentManagerFragmentActivity可能具有的子类的对象.Application不是的子类FragmentActivity.

另一个问题是,为什么你需要一个FragmentManager实例ViewModel?最有可能你应该委托视图相关的东西来处理比其它其它单元ViewModel(例如Activity,Fragment).请记住,这ViewModel将保留在配置更改之上,因此如果您保留对FragmentManager内部的引用ViewModel,则会泄露您的Activity实例.