如何解决添加新的 LiveData 项时,适配器不会更新
在我的 ViewModel 中,我创建了一个 mutableList 并使用 LiveData 在 Activity 中观察它,我将列表传递给 ListAdapter。但是当我使用该方法向列表添加新项目时,LiveData 不会自动更新列表。只有在显式调用 notifyDataSetChanged()
时才会更新列表。
如何在没有 notifyDataSetChanged()
方法的情况下使 LiveData 工作?
我的视图模型:
class MainViewModel : ViewModel() {
private val _listWindows = MutableLiveData<MutableList<Window>>().apply {
value = mutableListOf(Window())
}
fun addWindow(window: Window) {
_listWindows.value?.add(window)
_listWindows.value = _listWindows.value
}
val list: LiveData<MutableList<Window>> = _listWindows
}
活动:
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var viewModel: MainViewModel
private val adapterWindows = AdapterWindows()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.lifecycleOwner = this
viewModel = ViewModelProvider(this).get(MainViewModel::class.java).also {
binding.viewmodel = it
}
with(binding) {
recyclerView.apply {
adapter = adapterWindows
layoutManager = LinearLayoutManager(this@MainActivity)
}
}
viewModel.list.observe(this,Observer {
adapterWindows.submitList(it)
})
binding.buttonAddWindow.setOnClickListener {
viewModel.addWindow(Window())
}
}
数据类:
data class Window(val length: String = "",val width: String = "") {
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。