安卓开发——观察者模式的使用(ViewModel及MutableLiveData的使用)

本文介绍了观察者模式在Android中的应用,重点讲解了如何创建MyViewModel子类,使用MutableLiveData存储和更新数据,以及如何通过ViewModelProvider.Factory自定义实例。通过观察者模式监听数据变化并在合适时机执行操作。
部署运行你感兴趣的模型镜像

目录

观察者模式是什么?

1.创建ViewModel的子类myViewModel

2.创建MyViewModel并实例化


观察者模式是什么?

  • 你有一个变量,会有一个监听器去监听这个变量,当变量发生变化时监听器会触发并做出你想要的操作。

  • 其中,这个被监听的变量就是被观察的对象,当这个对象发生变化时我们可以触发回调并进行相应处理。

1.创建ViewModel的子类myViewModel
    public class MyViewModel extends ViewModel {
        private MutableLiveData<Integer> myVariable = new MutableLiveData<>(); //livedata的具体类,为可变livedata,可以更改并在观察者模式观察并随时更新

        public MyViewModel(){

        }
        public LiveData<Integer> getMyVariable() {
            return myVariable;
        }

        public void setMyVariable(int value) {
            //myVariable.setValue(value);
            myVariable.postValue(value); //postvalue用于在主线程更新value,避免产生异常
        }
    }

为什么要继承自ViewModel?

因为在Android中,ViewModel是用于管理UI相关数据和业务逻辑的类。它能帮助开发者在配置变化时保持数据一致性,避免生命周期导致一些数据异常等,能将数据存储在ViewModel中保证数据在配置变化时不会丢失。(相当于数据和活动分开了,但是又能保持通信)

MutableLiveData是什么?

这是一个继承自Livedata的存储数据的类,其中构造函数参数是T,所以你可以自定义数据类型。它可以在数据变化后通知回调函数。这就是我们需要被观察的那个变量。

getMyVariable和setMyVariable是什么?

这是用来获取我们实例化的那个被观察变量和给被观察变量赋值的。

其中,setValue()只能在主线程使用,而postValue()可以在其他线程使用,它会将这个操作提交到主线程的消息队列里。这两个方法都是用于更新被观察变量的。

2.创建MyViewModel并实例化
    public MyViewModel myViewModel;

    public class MyViewModelFactory implements ViewModelProvider.Factory {

          @NonNull
          @Override
          public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
                 if (modelClass.isAssignableFrom(MyViewModel.class)) {
                  return (T) new MyViewModel();
              }
              throw new IllegalArgumentException("Unknown ViewModel class");
          }
      }
    //onCreateView内
    myViewModel = new ViewModelProvider(this, new MyViewModelFactory()).get(MyViewModel.class);
    //onResume内
    myViewModel.getMyVariable().observe(this, new Observer<Integer>() {
    @Override
    public void onChanged(Integer value) {
            if (value == 1) {
                //执行你想在监听后进行的操作
                handler.postDelayed(Show_workmatesRunnable, 5000);
                myViewModel.setMyVariable(0);  
            }
        }
    });

    //其他要想执行监听回调的地方
    myViewModel.setMyVariable(1); 

我的系统默认的ViewModelProvider.Factory无法创建MyViewModel实例。所以需要自定义实例来处理ViewModel的创建。

实例化后就可以使用了。

使用livedata的observe方法就可以以观察者的方式监听数据变化了。

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值