在Android MVVM架构中,Repository是用于获取数据的中间层,通常与远程数据源(如网络)和本地数据源(如数据库)交互。而LiveData是一种用于在数据发生变化时通知观察者的类。
为了强制LiveData从仓库更新,可以使用以下的解决方法:
class MyRepository {
private val data: MutableLiveData = MutableLiveData()
fun fetchData() {
// 从远程数据源或本地数据源获取数据
val newData = "New data"
data.postValue(newData) // 更新LiveData对象的值
}
fun getData(): LiveData {
return data
}
}
class MyViewModel(private val repository: MyRepository) : ViewModel() {
val data: LiveData = repository.getData()
fun fetchData() {
repository.fetchData()
}
}
class MyActivity : AppCompatActivity() {
private lateinit var viewModel: MyViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 创建ViewModel对象
viewModel = ViewModelProviders.of(this).get(MyViewModel::class.java)
// 观察LiveData对象
viewModel.data.observe(this, Observer { newData ->
// 更新UI
updateUI(newData)
})
// 调用ViewModel中的方法来获取数据
viewModel.fetchData()
}
private fun updateUI(data: String) {
// 更新UI逻辑
}
}
这样,当调用ViewModel中的fetchData()方法时,Repository会更新LiveData对象的值,触发观察者(Activity或Fragment)的回调函数,从而更新UI。