Внедрение шаблона проектирования MVVM в котлине для переработчика - PullRequest
1 голос
/ 03 апреля 2019

Я новичок в Kotlin и пытаюсь внедрить шаблон проектирования MVVM для разработки под Android. Я должен реализовать Recyclerview во фрагменте. Как мы можем присвоить адаптеру со значением значение recyclerview из класса viewmodel, так как вызов API наблюдается внутри viewmodel.

Мой класс фрагментов выглядит как показано ниже

class NotesFragment : Fragment() {

lateinit var binding:FragmentNotesBinding
lateinit var viewModel:NoteListViewModel

companion object {
    fun newInstance(param1: String): NotesFragment {
        val fragment = NotesFragment()
        val args = Bundle()
        fragment.arguments = args
        return fragment
    }
}

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {
    binding = DataBindingUtil.inflate(inflater,R.layout.fragment_notes,container,false)
    viewModel = NoteListViewModel(binding)
    return binding.root
}

это хорошая практика, что мы передаем объект привязки нашему классу viewmodel и снова обновляем объект viewModel из класса ViewModel, как показано ниже

 private fun onSuccess(success: NoteResponse?) {
    dataVisibility.value=View.VISIBLE
    success.let {
        noteAdapter= noteAdapter(documentResponse?.result,mContext)
        binding.viewModel=this
    }
}

1 Ответ

2 голосов
/ 03 апреля 2019

В основе MVVM лежит разделение проблем. ViewModel не должен содержать никаких ссылок на View (Activity / Fragment). Как и ваш слой данных / репозитория не должен содержать ссылку на ViewModel.

Таким образом, для достижения потока данных вы можете использовать Reactive Observables (Rx) / LiveData из компонентов архитектуры Android для передачи данных.

1) Создайте MutableLiveData в вашей Viewmodel.

2) Установите MutableLiveData с моделью ответа API.

3) Обратите внимание на MutableLiveData в вашем фрагменте для данных ответа.

4) Используйте данные, чтобы установить адаптер внутри фрагмента.

Пожалуйста, отметьте ViewModel - документ разработчика , чтобы лучше понять.

...