'Android: live data set from fragment is not triggered in activity

Here is my vm in kotlin:

class DataViewModel : ViewModel() {

    private var _pcs : MutableLiveData<ArrayList<String>> = MutableLiveData()
    var pcs : LiveData<ArrayList<String>> = _pcs
    private var manualPcs: ArrayList<String> = ArrayList()

    private var _weight : MutableLiveData<ArrayList<String>> = MutableLiveData()
    var weight : LiveData<ArrayList<String>> = _pcs
    private var manualWeight: ArrayList<String> = ArrayList()

    private var _rfs : MutableLiveData<ArrayList<String>> = MutableLiveData()
    var rfs : LiveData<ArrayList<String>> = _pcs
    private var rfIDs: ArrayList<String> = ArrayList()


    fun setDashBoardData(data: ArrayList<TidDetailsHolder>) {
        manualPcs.clear()
        manualWeight.clear()
        rfIDs.clear()
        for (item in data) {
            when (item.type) {
                "Manual By Pcs" -> {

                    manualPcs.add(item.gettID())
                }
                "Manual By Weight" -> {

                    manualWeight.add(item.gettID())
                }
                else -> {

                    rfIDs.add(item.gettID())
                }
            }
        }
        _pcs.postValue(manualPcs)
        _weight.postValue(manualWeight)
        _rfs.postValue(rfIDs)
        Debug.i("alert 1: manual pcs ${manualPcs.size} weight ${manualWeight.size} rfid ${rfIDs.size}");
    }

}

Fragment in java:

private DataViewModel dataViewModel;

initialized in oncreate :

dataViewModel = new ViewModelProvider(requireActivity()).get(DataViewModel.class);

My activity:

similarly initialized in oncreate and the observers are set

dataViewModel = new ViewModelProvider(this).get(DataViewModel.class);
        Debug.i("alert 1: vm hash ac" + dataViewModel.hashCode());
        dataViewModel.getPcs().observe(this, new Observer<ArrayList<String>>() {
            @Override
            public void onChanged(ArrayList<String> strings) {
                Debug.i("alert 1: by pcs " + strings.size());
            }
        });

        dataViewModel.getWeight().observe(this, new Observer<ArrayList<String>>() {
            @Override
            public void onChanged(ArrayList<String> strings) {
                Debug.i("alert 1: by weight " + strings.size());
            }
        });

the observables are not triggered, also if it matters the hashcode of the vm in the fragment and activity is different. What am I missing here ??



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source