用于回收视图的 kotlin 中的 MVVM 设计模式实现

ran*_*ith 3 data-binding mvvm kotlin android-recyclerview android-livedata

我是 Kotlin 的初学者,并试图在 android 开发中实现 MVVM 设计模式。我必须在片段中实现一个 Recyclerview。由于 api 调用是在 viewmodel 中观察到的,我们如何从 viewmodel 类将带有值的适配器设置为 recyclerview。

我的片段类如下所示

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
}
Run Code Online (Sandbox Code Playgroud)

我们将绑定对象传递给我们的 viewmodel 类并从 ViewModel 类中再次更新 viewModel 对象是一种很好的做法,如下所示

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

raf*_*afa 6

MVVM 的核心是关注点分离。ViewModel 不应持有对 View(Activity/Fragment) 的任何引用。同样,您的数据/存储库层不应包含 ViewModel 引用。

因此,要实现数据流,您可以使用来自 android 架构组件的 Reactive Observables(Rx)/LiveData 来传回数据。

1) 在您的 Viewmodel 中创建 MutableLiveData。

2) 使用 api 响应模型设置 MutableLiveData。

3) 观察 Fragment 中的 MutableLiveData 以获取响应数据。

4) 使用数据在片段中设置适配器。

请查看ViewModel - 开发人员文档以更好地理解。