1

AndroidViewModel用于访问Application上下文。我试图访问ActivityFragmentManager没有传递给它明确:获取AndroidViewModel中的FragmentManager

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

得到错误,无法施展ContextActivity


问题:有没有什么办法让FragmentManagerAndroidViewModel没有传递给它明确?

回答

4

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

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

另一个问题是,为什么你会在ViewModel内需要一个FragmentManager实例?大多数情况下,您应该委托视图相关内容处理除ViewModel以外的其他单位(例如ActivityFragment)。请记住,此ViewModel将保留在配置更改上,因此如果您在ViewModel内保留对FragmentManager的引用,则会泄露您的Activity实例。

+0

是的,这是一个值得思考的问题。 – Oleg

相关问题