[英]Set data from Viewmodel to activity android kotlin
我是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 。 我怎樣才能做到這一點?
這是更多的 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。 您還可以刪除變量的 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)
}
})
在 Activity 中編寫此代碼並能夠將數據設置為 EditText
在活動中做以下三個步驟:
1. 在活動中聲明您的 ViewModel。
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 })
同樣在您的 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
}
}
如果還需要任何幫助,請告訴我,如果需要,可以查看下面的演示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.