ViewModel的简单使用

首先创建一个类继承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

发布了25 篇原创文章 · 获赞 0 · 访问量 586

猜你喜欢

转载自blog.csdn.net/u011609120/article/details/103972307