首先创建一个类继承ViewModel
public class MyViewModel extends ViewModel {
public int num = 0;
}
然后在mainActivity中通过ViewModelProviders.of(this).get(MyViewModel.class)得到myviewmodel这个实例对象。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = findViewById(R.id.button1);
button2 = findViewById(R.id.button2);
textView = findViewById(R.id.textView2);
myViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
textView.setText(String.valueOf(myViewModel.num));
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
myViewModel.num++;
textView.setText(String.valueOf(myViewModel.num));
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
myViewModel.num += 2;
textView.setText(String.valueOf(myViewModel.num));
}
});
}
特别注意的是需要手动引入import androidx.lifecycle.ViewModelProviders;这个包,而不是*.ViewModelProvider这个包,否则无法使用ViewModelProviders这个方法。
通过使用ViewModel来存储数据,防止数据因为布局的重载而丢失,也不必再使用onSaveInstanceState来保存数据。
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("textView",textView.getText().toString());
}
ViewModel官方介绍:https://developer.android.google.cn/topic/libraries/architecture/viewmodel.html#java
github参考代码:
https://github.com/Mrlove133481/Widget_Test