Получить FragmentManager внутри AndroidViewModel
AndroidViewModel
используется для доступа Application
контекст. Я пытаюсь получить доступ Activity
"s FragmentManager
не передавая это явно:
class FooViewModel(app: Application) : AndroidViewModel(app) {
private val fm = (app.applicationContext as Activity).fragmentManager
..
}
Получаю ошибку, не могу разыграть Context
в Activity
,
Вопрос: есть ли способ получить FragmentManager
внутри AndroidViewModel
не передавая это явно?
2 ответа
Я думаю, что короткий ответ будет "нет, нет пути", потому что Application
контекст не знает о FragmentManager
,
FragmentManager
это объект, который подклассы FragmentActivity
можно иметь. Application
не подкласс FragmentActivity
,
Другой вопрос, зачем вам нужен FragmentManager
экземпляр внутри вашего ViewModel
? Скорее всего, вам следует делегировать относящиеся к представлению вещи для обработки другому модулю, кроме ViewModel
(например Activity
, Fragment
). Имейте в виду, что это ViewModel
будет сохраняться при изменении конфигурации, поэтому, если вы сохраните ссылку на FragmentManager
внутри вашего ViewModel
Вы бы слили Activity
пример.
Я знаю слишком поздно, но когда я искал о диспетчере фрагментов внутри viewmodel, нашел этот ответ поверх результатов Google:)
Хорошо. я очень искал и нашел способ (KOTLIN lang) вы можете конвертировать в Java
fun changeFrag(view:View) {
val uiHandler = Handler()
uiHandler.post { (getActivity(view.rootView) as AppCompatActivity).supportFragmentManager.beginTransaction().replace(R.id.main_frame, MainPageFragment()).commitNow() }
}
установить представление из xml или другого класса.... и функция getActivity():
private fun getActivity(view: View): Activity {
return view.findViewById<View>(android.R.id.content).context as Activity
}
я надеюсь помочь