簡體   English   中英

將數據從 Viewmodel 設置為活動 android kotlin

[英]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
  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 })

    同樣在您的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM