В моей ViewModel я создаю mutableList и наблюдаю за ним в Activity с помощью LiveData, я передаю список в ListAdapter. Но когда я добавляю новый элемент в список с помощью метода, LiveData не обновляет список автоматически. Список будет обновлен только при явном вызове notifyDataSetChanged()
.
Как заставить LiveData работать без метода notifyDataSetChanged()
?
Моя модель просмотра:
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 = "") {
}
Вы можете сделать это, submitList (null), затем submitList (newList) для предотвращения вызова неявного уведомления.
Спасибо за ваши ответы. Пытался найти ошибку в моем коде))
вы не можете обновить список без notifyDataSetChanged ()