我们都知道Android ViewModel的生命周期不随Activity的生命周期而改变,因此我们切换横竖屏的时候,数据也不会被清空掉,我们存储在ViewModel对象里面的数据,有时候需要在另外一个Activity或者Fragment里面获取到,就需要做到在不同的Activity获取同一个Android ViewModel对象,这样才能拿到同一个值。
如何做到在不同的Activity或者不同的Fragment中获取到同一个ViewModel的对象呢?
1:我们先来定义一个MyViewModel对象,代码如下:
public class MyViewModel extends AndroidViewModel {
private int shareValue = 0;
public MyViewModel(@NonNull Application application) {
super(application);
}
}2:在Activity里面创建MyViewModel对象,并设置shareValue的值,代码如下:
public class MainActivity extends AppCompatActivity {
private int number_one = 0;
private MyViewModel myViewModel;
public static MainActivity mainActivity = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mainActivity = this;
myViewModel = new ViewModelProvider(MainActivity.mainActivity).get(MyViewModel.class);
myViewModel.shareValue = 88;
}
}注意这一行代码,我在onCreate()方法里面把this存储到了一个mainActivity的静态变量里面了,这是关键!如下:
mainActivity = this;
3:在别的Activity或者Fragment里面获取同一个MyViewModel对象,代码如下:
public class secondActivity extends AppCompatActivity {
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
mTextView = (TextView) findViewById(R.id.text);
//注意创建ViewModel对象中的这一行代码“MainActivity.mainActivity”
MyViewModel myViewModel = new ViewModelProvider(MainActivity.mainActivity).get(MyViewModel.class);
//获取共享值:88
Integer num = myViewModel.shareValue;
mTextView.setText("获取页面共享的值:"+(num==null?0:num));
}
}