关于ViewModel SavedState(学习笔记)

ViewModel是保存activitiy中的数据 当系统屏幕反转或者按下home时activity会被销毁重新创建,这时候我们的数据会被重新初始化,所以我们要用ViewModel来保存当前的状态(当然按下返回键和结束进程不会保存)
在gradle(app)中添加依赖

implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01'

然后新建一个MyView Model类 继承ViewModel

public class MyViewModle extends ViewModel {
private SavedStateHandle handle;

public MyViewModle(SavedStateHandle handle) {//构造方法
    if (!handle.contains("NUMBER")){//如果handle没有包含NUMBER我们就新建一个赋值0
        handle.set("NUMBER",0);
    }

    this.handle = handle;
}

public LiveDatagetNumber(){//过去数据值
    return handle.getLiveData("NUMBER");
}

public void add(){//加1运算
    handle.set("NUMBER",(int)handle.get("NUMBER") + 1);
}
}

然后再mainlayout中添加数据绑定
关于ViewModel SavedState(学习笔记)_第1张图片

TextView设置TEXT属性为关于ViewModel SavedState(学习笔记)_第2张图片

Button设计点击事件为
关于ViewModel SavedState(学习笔记)_第3张图片

这是说明一下 使用数据绑定后 @{} 大括号内可以使用Java语法 ()->是方法的调用

然后再MainActivity写如代码

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ActivityMainBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_main);//从数据绑定工具类中绑定
    MyViewModle viewModle = ViewModelProviders.of(this,new SavedStateViewModelFactory(getApplication(),this)).get(MyViewModle.class);//从工厂类中获取
    binding.setData(viewModle);
    binding.setLifecycleOwner(this);
}
}

然后既可以运行项目看看

关于ViewModel SavedState(学习笔记)_第4张图片

你可能感兴趣的:(Android学习)