Получить 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
}

я надеюсь помочь