美文网首页
Lifecycle liveData和ViewModel

Lifecycle liveData和ViewModel

作者: 琳媚儿 | 来源:发表于2019-11-13 11:51 被阅读0次

LiveData是一个数据持有类,他可以通过观察者被其他组件观察其变更

image
image

生命周期
ViewModel的声明周期依赖于Activiy或者Fragment,会在onCreate的时候创建ViewModel,ViewModel的生命周期一直持续到Activity最终销毁或Frament最终detached,期间由于屏幕旋转等配置变化引起的Activity销毁重建并不会导致ViewModel重建。

image

导入

    implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'

实例:

MainActivity.java:

    button = findViewById(R.id.button);
        textView = findViewById(R.id.textView);
        seekBar = findViewById(R.id.seekBar);
        button.setOnClickListener(this);
        myViewModel = new MyViewModel();
        //创建时关联Activity视图
        myViewModel = ViewModelProviders.of(this)
                .get(MyViewModel.class);
        //注册观察者
        //法一
        myViewModel.getData().observe(this, new Observer<User>() {
            @Override
            public void onChanged(User user) {
                textView.setText(user.getName());
                textView.setText(user.getAge()+"");
            }
        });
        //法二 lamuda表达式
//        myViewModel.getData().observe(this,obj->seekBar.setProgress(Integer.parseInt(obj.getAge())));
        myViewModel.getData().observe(this, new Observer<User>() {
            @Override
            public void onChanged(User user) {
                seekBar.setProgress(Integer.parseInt(user.getAge()));
            }
        });
    }
    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.button:
                User user=new User();
                user.setName("Sun");
                user.setAge("80");
                myViewModel.setUser(user);
        }
    }

新建一个MyViewModel类,并继承ViewModel:

public class MyViewModel extends ViewModel {
    private MutableLiveData<User> data;

    public MyViewModel() {
        data = new MutableLiveData<User>();
    }

    public MutableLiveData<User> getData() {
        return data;
    }

    //增加数据变动
    public void setUser(User user) {
        data.setValue(user);
    }
}

建立一个User实体类:

   private String name;
    private String age;
7efdc81fd03c710a04ca78dc25ee444.jpg

相关文章

网友评论

      本文标题:Lifecycle liveData和ViewModel

      本文链接:https://www.haomeiwen.com/subject/ymchictx.html