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

相關問題