0

我们如何在 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 模块将代码转换为保存数组列表

4

0 回答 0