将数据从视图模型设置为活动 android kotlin



我是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
  1. 初始化视图模型:

    viewModel = ViewModelProviders.of(this).get(PostViewModel::class.java)
    
  2. 观察来自 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
}
}

如果仍然需要任何帮助,请告诉我,以便在需要时查看下面的演示。

相关内容

  • 没有找到相关文章

最新更新