'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 |
|---|
