Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何转换ViewModel以利用状态保存?_Java_Android_Savestate_Android Savedstate_Viewmodel Savedstate - Fatal编程技术网

Java 如何转换ViewModel以利用状态保存?

Java 如何转换ViewModel以利用状态保存?,java,android,savestate,android-savedstate,viewmodel-savedstate,Java,Android,Savestate,Android Savedstate,Viewmodel Savedstate,我有一个ViewModel,我目前正在使用它来包含数据并在片段之间共享值。此模型还有助于在活动开始时实例化应用程序的数据 我现在正试图在我的应用程序中添加状态保存功能,我对如何将这两个系统合并在一起感到困惑。android文档提到要使用此构造函数: 公共MyViewModel(SavedStateHandle SavedStateHandle){ mState=savedstatehold; } 但是,我不确定状态是如何传递的,这个构造函数是如何在活动中使用的(以下是我的用法): myView

我有一个
ViewModel
,我目前正在使用它来包含数据并在片段之间共享值。此模型还有助于在活动开始时实例化应用程序的数据

我现在正试图在我的应用程序中添加状态保存功能,我对如何将这两个系统合并在一起感到困惑。android文档提到要使用此构造函数:

公共MyViewModel(SavedStateHandle SavedStateHandle){
mState=savedstatehold;
}
但是,我不确定状态是如何传递的,这个构造函数是如何在活动中使用的(以下是我的用法):

myViewModel=newviewmodelprovider(requirectivity()).get(myViewModel.class);
无论如何,因为在savedState为null的情况下,我还需要实例化数据,所以我不确定该部分如何适应。以下是我的ViewModel类的概述,以供参考:

公共类myViewModel扩展了ViewModel{

//private MutableLiveData foo;您不需要无参数构造函数。相反,您应该使用另一个具有初始值的构造函数:

public class myViewModel extends ViewModel {

    private SavedStateHandle mState;
    private static final String FOO_KEY = "foo";

    public myViewModel(SavedStateHandle savedStateHandle) {
        mState = savedStateHandle;
    }

    LiveData<Integer> getFoo() {
        // Get the LiveData, setting the default value if it doesn't
        // already have a value set.
        return mState.getLiveData(FOO_KEY, 4);
    }

    void setFoo(int foo) { mState.set(FOO_KEY, foo); }

}
公共类myViewModel扩展了ViewModel{
私有savedstatehold mState;
私有静态最终字符串FOO_KEY=“FOO”;
公共myViewModel(SavedStateHandle SavedStateHandle){
mState=savedstatehold;
}
LiveData getFoo(){
//获取LiveData,如果没有,则设置默认值
//已经设置了一个值。
返回mState.getLiveData(FOO_键,4);
}
void setFoo(intfoo){mState.set(foo_键,foo);}
}

您不需要无参数构造函数。相反,您应该使用另一个具有初始值的构造函数:

public class myViewModel extends ViewModel {

    private SavedStateHandle mState;
    private static final String FOO_KEY = "foo";

    public myViewModel(SavedStateHandle savedStateHandle) {
        mState = savedStateHandle;
    }

    LiveData<Integer> getFoo() {
        // Get the LiveData, setting the default value if it doesn't
        // already have a value set.
        return mState.getLiveData(FOO_KEY, 4);
    }

    void setFoo(int foo) { mState.set(FOO_KEY, foo); }

}
公共类myViewModel扩展了ViewModel{
私有savedstatehold mState;
私有静态最终字符串FOO_KEY=“FOO”;
公共myViewModel(SavedStateHandle SavedStateHandle){
mState=savedstatehold;
}
LiveData getFoo(){
//获取LiveData,如果没有,则设置默认值
//已经设置了一个值。
返回mState.getLiveData(FOO_键,4);
}
void setFoo(intfoo){mState.set(foo_键,foo);}
}

这看起来很有希望,我今天就试一试谢谢你的回答,这正是我所需要的。我将此与逻辑检查相结合,以确保键是否已填充:
如果(!savedState.contains(MY_key){return getLiveData(MY_key,defaultValue)}
@MatthewStrom-你不需要这样做-
getLiveData
为你做这件事,只有在没有设置值的情况下才应用默认值。这看起来很有希望,我今天就试试看。谢谢你的回答,这正是我需要的。我将此与逻辑检查结合起来,以确保键是否已填充:
如果(!savedState.contains(MY_KEY){return getLiveData(MY_KEY,defaultValue)}
@MatthewStrom-您不需要这样做-
getLiveData
为您这样做,仅在没有设置值的情况下应用默认值。