我们都知道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)); } }