最新消息:关注【已取消】微信公众号,可以获取全套资料,【全套Java基础27天】【JavaEE就业视频4个月】【Android就业视频4个月】

不同的Activity获取同一个Android ViewModel对象的方法

Android 太平洋学习网 浏览 评论

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


来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/android/1052.html
"文章很值,打赏犒劳作者一下"
微信号: Javaweb_engineer

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

与本文相关的文章

发表我的评论
取消评论

表情

您的回复是我们的动力!

  • 昵称 (必填)

网友最新评论