我是MVVM
架构的新手。我在viewmodel
中从数据库获取数据,现在我想在activity
中将该数据设置为EditTexts
class EmployeeViewModel : BaseViewModel<EmployeeNavigator>() {
var userList = ArrayList<EmployeeResponse>()
var mName = MutableLiveData<EmployeeResponse>()
fun fetchUsersAndSaveInDB(toString: String) {
dialogMessage.value = "Fetching Data..."
dialogVisibility.value = true
mDisposable.add(DataProvider.fetchUsersAndSave(Consumer {
getUsersFromDB()
}, Consumer {
checkError(it)
}, toString))
}
private fun getUsersFromDB() {
mDisposable.add(DataProvider.getUsersFromDb(Consumer {
dialogVisibility.value = false
userList = it as ArrayList<EmployeeResponse>
mName.value = userList[0]
}, Consumer { checkError(it) }))
}
}
我现在mName
对象中获取了数据,我想将此数据设置为在我的activity
中编辑文本。我怎样才能做到这一点?
这是更多 Kotlin 的方法。
添加此依赖项以使观察函数看起来更短
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0-rc03'
如果只有一个函数参数,则无需将其传递到大括号内。 因此,在Activity
中,您可以执行以下操作:
mViewModel.mName.observe(this) {
it?.let { tv_emp_name.setText(it.empName) }
}
同样遵循 Kotlin 样式指南,如果您使用的是kotlinx.android.synthetic
,最好对布局 ID 使用 camelCase 命名(在这种情况下允许使用匈牙利表示法(。您还可以删除变量的 m 前缀。
遵循所有这些之后,您的代码将如下所示:
viewModel.name.observe(this) {
it?.let { tvEmpName.setText(it.empName) }
}
mViewModel.mName.observe(this, Observer {
if (it != null) {
tv_emp_name.setText(it.empName)
}
})
在活动中编写此代码,并能够将数据设置为编辑文本
在活动中 执行以下三个步骤:
1.在活动中声明您的视图模型。
private lateinit var viewModel: EmployeeViewModel
初始化视图模型:
viewModel = ViewModelProviders.of(this).get(PostViewModel::class.java)
观察来自 ViewModel 的数据:
viewModel.getWhateverData() .observe(this, Observer<List<"Your class">> { userPost -> adapter?.setPosts(userPost) recycler_view.adapter = adapter })
同样在您的视图模型方法中,您没有提到您想要观察的内容。
视图模型演示
class PostViewModel(application: Application) : AndroidViewModel(application) {
private val repository: PostRepository = PostRepository()
private var userId: Int = -1
lateinit var userPost: LiveData<List<Post>>
fun getUserPost(id: Int): LiveData<List<Post>> {
this.userId = id
userPost = repository.getUserPost(id)
return userPost
}
}
如果仍然需要任何帮助,请告诉我,以便在需要时查看下面的演示。