Этот лог c может быть перемещен в ViewModel
, но с небольшими затратами. Конечно, решение о том, какой фрагмент добавить, следует переместить в ViewModel
, но код добавляемого фрагмента должен остаться в Fragment
(или Activity
). Я думаю, это должно выглядеть примерно так:
Фрагмент:
override fun onItemClick(titleName: Int) {
viewModel.onTitleClick(titleName)
}
ViewModel :
fun onTitleClick(titleName: Int) {
when (titleName) {
R.string.about_terms_service -> {
postViewModelEvent(ShowWebViewFragmentEvent())
}
R.string.about_open_source_licenses -> {
// TODO: open License fragment
}
}
}
In ViewModel
вы должны заменить эти // TODO
s указанными c командами для вашего Представления (Fragment
, Activity
), что приведет к переходу к указанному c фрагменту. О том, как это сделать, например, написано здесь (но, конечно, подойдет любое ViewModel
- Fragment
решение).
В этом случае это лог c может быть легко протестировано.
Если вы подключаете ваш ViewModel
к вашему Fragment
посредством просмотра событий модели (описанных в ссылке), вы можете сделать это:
Создать событие показа WebViewFragment
, например:
class ShowWebViewFragmentEvent(): ViewModelEvent {
override fun handle(activity: BaseActivity) {
super.handle(activity)
activity?.addFragment(
WebViewFragment.newInstance(
TERMS_LINK,
getString(R.string.about_terms_service)
)
)
}
}
и размещение его в вашем ViewModel
(вместо первого // TODO
), например:
postViewModelEvent(ShowWebViewFragmentEvent())
Обратите внимание , что все необходимые изменения из связанного поста должны быть сделаны.