我们如何在 Android 中为 ViewModel 使用 Saved State 模块保存 Arraylist
Arraylist 只有 5 个项目。
我有这个工作正常的代码
private MutableLiveData<ArrayList<CommonOwn>> mutableCart = new MutableLiveData<>();
public LiveData<ArrayList<CommonOwn>> getCart() {
if (mutableCart.getValue() == null) {
initCart();
}
return mutableCart;
}
public void initCart() {
mutableCart.setValue(new ArrayList<CommonOwn>());
}
public void addItemToCart(CommonOwn commonOwn) {
if (mutableCart.getValue() == null) {
initCart();
}
ArrayList<CommonOwn> cartItemList = new ArrayList<>(mutableCart.getValue());
if (cartItemList.contains(commonOwn)) {
int a = cartItemList.indexOf(commonOwn);
cartItemList.remove(a);
} else {
cartItemList.add(commonOwn);
}
mutableCart.setValue(cartItemList);
}
这可以很好地处理屏幕方向的变化
现在我想处理进程死亡所以我尝试使用下面的代码转换它
public class CommonViewModel extends ViewModel {
private SavedStateHandle mState;
public CommonViewModel(SavedStateHandle savedStateHandle) {
mState = savedStateHandle;
}
private static final String NAME_KEY = "name";
public LiveData<ArrayList<CommonOwn>> getCart() {
if (mState.getLiveData(NAME_KEY) == null) {
initCart();
}
return mState.getLiveData(NAME_KEY);
}
public void initCart() {
mState.set(NAME_KEY, new ArrayList<CommonOwn>());
}
public void addItemToCart(CommonOwn commonOwn) {
if (mState.getLiveData(NAME_KEY) == null) {
initCart();
}
ArrayList<CommonOwn> cartItemList
= new ArrayList<CommonOwn>((Collection<? extends CommonOwn>)
mState.getLiveData(NAME_KEY));
if (cartItemList.contains(commonOwn)) {
int a = cartItemList.indexOf(commonOwn);
cartItemList.remove(a);
} else {
cartItemList.add(commonOwn);
}
mState.set(NAME_KEY, cartItemList);
}
}
但是我收到此错误
java.lang.ClassCastException: androidx.lifecycle.SavedStateHandle$SavingStateLiveData cannot be cast to java.util.Collection
我的问题是我们如何使用 ViewModel 的 Saved State 模块将代码转换为保存数组列表