使用ViewModel

1、创建一个类:继承ViewModel

public class MyViewModel extends ViewModel {
    
    
    private MutableLiveData<String> name;

    public LiveData<String> getName(){
    
    
        //这里要判断name是否为空,如果空就要new一个LiveData并返回
        if(name == null){
    
    
            name = new MutableLiveData<String>();
        }
        return name;
    }

    public void setName(String name){
    
    
        this.name.setValue(name);
    }
}

2、在Activity中使用:

public class MainActivity extends AppCompatActivity {
    
    

    private TextView tvName;
    private Button button;
    private MyViewModel model;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvName = findViewById(R.id.textview);
        button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View view) {
    
    
                String Name = "abao";
                model.setName(Name); 
            }
        });
        //获取model
        model = new ViewModelProvider(this, new ViewModelProvider.NewInstanceFactory())
                .get(MyViewModel.class);
        //注册观察者,观察数据变化,变化时候更新UI.
        //普通写法:
//        model.getName().observe(this, new Observer<String>() {
    
    
//            @Override
//            public void onChanged(String s) {
    
    
                //更新UI
//                tvName.setText(s);
//            }
//        });
        //lambda写法:
        model.getName().observe(this, s -> {
    
    
            //更新UI
            tvName.setText(s);
        });
    }
}

3、ViewModel的生命周期

ViewModel 对象存在的时间范围是获取 ViewModel 时传递给 ViewModelProviderLifecycleViewModel 将一直留在内存中,直到限定其存在时间范围的 Lifecycle 永久消失:对于 activity,是在 activity 完成时;而对于 fragment,是在 fragment 分离时。

下图是Activity经过屏幕旋转后结束时所处的生命周期,右边是ViewModel的生命周期。

说明 ViewModel 随着 Activity 状态的改变而经历的生命周期。

  • 通常在系统首次调用Activity的onCreater()方法是获取ViewModel。系统可能会在activity的整个生命周期内多次调用onCreater(),如在旋转屏幕时。ViewModel存在的时间范围是首次请求ViewModel直到activity 结束并且销毁。

猜你喜欢

转载自blog.csdn.net/qq_41811862/article/details/119703805