SavedSateHandle为数据存活更久而生,为避免程序被轻易地杀死,我选择用Save,下面来看看通常的使用步骤吧。
1、先导包,build.gradle(Module)
.......
defaultConfig {
......
dataBinding.enabled=true
}
}
dependencies {
......
implementation 'androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0'
}
2、先在活动控制器里声明你的对象,如:
package com.example.ballscorerememberpractice;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.SavedStateViewModelFactory;
import androidx.lifecycle.ViewModelProvider;
import android.os.Bundle;
import com.example.ballscorerememberpractice.databinding.ActivityMainBinding;
public class MainActivity extends AppCompatActivity {
private ActivityMainBinding binding;//绑定视图后会出现,如有疑问可见我的dataBinding博客
private MyViewModel myViewModel;//声明你的ViewModel
public static String score1="score1",score2="score2";//对象的名字
}
3、创建你的ViewModel
package com.example.ballscorerememberpractice;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.SavedStateHandle;
public class MyViewModel extends ViewModel {
private SavedStateHandle handle;
//!!!声明构造函数,传入SavedStateHandle对象,如果不行可能是import没能自动刷新导致
//可通过引入import androidx.lifecycle.SavedStateHandle;
public MyViewModel(SavedStateHandle handle){
this.handle=handle;
}
public MutableLiveData<Integer> getaTeam(){
if(!handle.contains(MainActivity.score1)){//判断handle是否获取过该对象.contains();
handle.set(MainActivity.score1,0);//设置对象值
}
return handle.getLiveData(MainActivity.score1);//获取对象值
}
}
4、活动创建时声明
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding= DataBindingUtil.setContentView(this,R.layout.activity_main);//设置视图
myViewModel=new ViewModelProvider(this,new SavedStateViewModelFactory(getApplication(),this)).get(MyViewModel.class);//注意:要使用SavedStateViewModelFactory()来获取存储的handle
binding.setData(myViewModel);//绑定数据对象到视图
binding.setLifecycleOwner(this);//必要环节
}
5、完成视图绑定后便可执行ViewModel的SavedStateHandle效果,若对DataBinding有疑问,看查看我的dataBinding博客。