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
本站说明
一起在知识的海洋里呛水吧。广告内容与本站无关。如果喜欢本站内容,欢迎投喂作者,谢谢支持服务器。如有疑问和建议,欢迎在下方评论~