美文网首页
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