4

AndroidViewModel用于访问Application上下文。我试图访问Activity'sFragmentManager而不明确传递它:

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

出现错误,无法转换ContextActivity.


问题:有没有什么方法可以FragmentManagerAndroidViewModel不明确通过的情况下进入?

4

1 回答 1

9

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

FragmentManager是 的子类FragmentActivity可能具有的对象。Application不是 的子类FragmentActivity

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

于 2017-06-15T10:45:59.260 回答