将数据从Viewmodel设置为activity androidKotlin

00jrzges  于 2023-08-06  发布在  Kotlin
关注(0)|答案(3)|浏览(104)

我是MVVM架构的新手。我从viewmodel中的db获取数据,现在我想将该数据设置为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中的edittexts。我该如何实现这一点?

2w2cym1i

2w2cym1i1#

这里有更多的Kotlin方法。
添加此依赖项可使observe函数看起来更短

implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0-rc03'

字符串
如果你只有一个函数参数,你不需要在大括号内传递它。在Activity中,您可以执行以下操作:

mViewModel.mName.observe(this) {
    it?.let { tv_emp_name.setText(it.empName) }
}


同样,在Kotlin style guidelines之后,如果使用kotlinx.android.synthetic,最好使用camelCase命名布局ID(在这种情况下允许匈牙利符号)。你也可以删除变量的前缀m。
在所有这些之后,您的代码看起来像这样:

viewModel.name.observe(this) {
    it?.let { tvEmpName.setText(it.empName) }
}

ca1c2owp

ca1c2owp2#

mViewModel.mName.observe(this, Observer {
      if (it != null) {
          tv_emp_name.setText(it.empName)
      }
  })

字符串
在Activity中编写此代码,并能够将数据设置为EditText

v8wbuo2f

v8wbuo2f3#

在活动中,请执行以下三个步骤:
1.在Activity中声明ViewModel。

private lateinit var viewModel: EmployeeViewModel

字符串
1.初始化视图模型:

viewModel = ViewModelProviders.of(this).get(PostViewModel::class.java)


1.从ViewModel观察数据:

viewModel.getWhateverData()
         .observe(this,
             Observer<List<"Your class">> { userPost ->
                 adapter?.setPosts(userPost)
                 recycler_view.adapter = adapter
             })


另外,在你的viewmodel方法中,你没有提到你到底想要观察什么。
视图模型演示

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
}
}


让我知道,如果仍然需要任何帮助,也可以看看下面的演示,如果需要的。

相关问题