Activity使用ViewModel¶
更新日期 2021-6-26
- 2021-6-26 创建文档
这里给出一个Activity使用ViewModel的简单例子。
- 设计ViewModel类
- 设计layout
- 在Activity中将2者关联起来
定义ViewModel¶
新建AnimCollectVm类继承AndroidViewModel。
import android.app.Application;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.MutableLiveData;
public class AnimCollectVm extends AndroidViewModel {
// 其他对象...
public AnimCollectVm(@NonNull Application application) {
super(application);
}
}
设计layout¶
layout文件anim_collect_act.xml
。
最外层用layout
标签。data
标签里放一个AnimCollectVm类型的vm
。
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="vm"
type="com.rustfisher.tutorial2020.animation.collection.AnimCollectVm" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 其他内容 -->
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
Activity中使用vm¶
Activity类AnimCollectAct需要继承androidx.appcompat.app.AppCompatActivity
。
使用DataBindingUtil.setContentView
方法来获得AnimCollectActBinding的对象mBinding
。
使用ViewModelProvider的get
方法,生成对应的AnimCollectVm对象mAnimVm
。
然后把mAnimVm
交给mBinding
对象。
public class AnimCollectAct extends AppCompatActivity {
private AnimCollectActBinding mBinding;
private AnimCollectVm mAnimVm;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBinding = DataBindingUtil.setContentView(this, R.layout.anim_collect_act);
mAnimVm = new ViewModelProvider(this).get(AnimCollectVm.class);
mBinding.setVm(mAnimVm);
// 其他代码...
}
}
参考工程 Tutorial2020
本站说明
一起在知识的海洋里呛水吧。广告内容与本站无关。如果喜欢本站内容,欢迎投喂作者,谢谢支持服务器。如有疑问和建议,欢迎在下方评论~