MVVM(DataBinding+ViewModel+LiveData)架构笔记
1.点击事件:
不带参数: @{()->vm.onClick() 带参数: @{()->vm.click(obj.id)} 带view的参数: @{(view)->()vm.click(obj,view)} //view是被点击的视图
2.事件绑定:
单向绑定: @{vm.msg} ; 双向绑定: @={vm.msg}
3.DataBinding使用:
//activity里面使用: ActivityMainBinding binding = DataBindingUtil.setContentView(MainActivity.this, R.layout.activity_main); //fragment里面使用: FragmentPersonalBinding mBinding = DataBindingUtil.bind(inflater.inflate(R.layout.fragment_personal, container));
4.ViewModel使用:
Activity的onCreate中增加:
//不带参数: MyViewModel model = ViewModelProviders.of(activity).get(MyViewModel.class); //带参数: MyViewModel model = ViewModelProviders.of(activity,factory).get(MyViewModel.class);
布局中添加:
<data> <variable name="vm" type="com.sf.nwmsrf.pad.buz.login.MyViewModel" /> </data>
Activity的onCreate中增加:
//给xml绑定model: getBinding().setVm(model);
5.LiveData使用:
Activity的onCreate中增加:
getBinding().setLifecycleOwner(this);
ViewModel中增加:
private MutableLiveData<String> msg = new MutableLiveData<>(); public MutableLiveData<String> getMsg () { return msg; }
使用下面方法即可实现数据更新:
// setValue和postValue的区别: setValue只可以在主线程中调用。postValue可以在主线程或者子线程中调用,但是数据只会由主线程执行更新。 msg.setValue("更新后的值"); //或 msg.postValue("更新后的值");
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
HarmonyOS支持的手机型号汇总