Я работаю над приложением типа POS и пытаюсь найти лучший способ обработки, показывающий общее количество элементов, выбранных пользователем. Для простоты предположим, что пользователь может либо выбрать элемент, либо отменить его выбор (у него не может быть кратных элемента). Это то, что я рассматривал, но я не уверен, что это правильный путь:
Модель
public class Item {
public String name;
public double cost;
}
Item ViewModel
public class ItemViewModel {
private Item model;
private MutableLiveData<Boolean> isSelected;
public ItemViewModel(Item model){
this.model = model;
this.isSelected = new MutableLiveData<>(false);
}
//...isSelected getter and code to handle selection...//
}
Main ViewModel
public class MainViewModel {
private final MutableLiveData<List<ItemViewModel>> items;
private final MutableLiveData<Double> totalCost;
public MainViewModel(List<Item> items){
List<ItemViewModel> viewModels = new ArrayList<>();
for(Item item : items) {
ItemViewModel vm = new ItemViewModel(item);
vm.getIsSelected().observerForever(this::onSelectionChanged);
viewModels.add(vm);
}
this.items = new MutableLiveData<>(viewModels);
this.totalCost = new MutableLiveData<>(0.00d);
}
private void onSelectionChanged(Boolean value){
double total = 0.00d;
//...total all selected items...//
this.totalCost.postValue(total);
}
}
В частности, можно ли наблюдать за другой ViewModel? Я рискую утечками памяти, делая это? Это неправильный способ решения этой проблемы?