Адаптер не обновляется при добавлении нового элемента LiveData

В моей 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 = "") {
}

вы не можете обновить список без notifyDataSetChanged ()

D_K 30.03.2021 09:48

Вы можете сделать это, submitList (null), затем submitList (newList) для предотвращения вызова неявного уведомления.

Y.Kakdas 30.03.2021 09:50

Спасибо за ваши ответы. Пытался найти ошибку в моем коде))

Денис 30.03.2021 16:55
0
3
20
0

Другие вопросы по теме