1.Andriod — JetPack (一):初识 JetPack

2.Andriod — JetPack (二):LifeCycle 的诞生

3.Andriod — JetPack (三):ViewModel 的诞生

4.Andriod — JetPack (四):BaseObservable 与 ObservableField 双向绑定

5.Andriod — JetPack (五):DataBinding + LiveData +ViewModel 简单实例

6.Andriod — JetPack (六):Room 增删改查

7.Andriod — JetPack (七):Room + ViewModel + LiveData 增删改查实例

一、DataBinding

1.让布局页面承担了部分原本属于页面的工作,是页面文件和布局耦合度进一步降低。页面文件:Activity。布局:activity_main.xml

2.减少了很多 findViewById 与 OnClickListener
布局文件可以包含一些简单的业务逻辑

二、LiveData

在 ViewModel 中的数据发生变化时通知页面
LiveData 与 ObservableField 同样可以实现双向绑定
这里的 Model 层下面的例子未呈现,等过后学到了 JetPack - Room 自然就懂了

三、ViewModel

1.它是介于 View(视图)和 Model(数据模型)直接的桥梁
2.使视图和数据能够分离,也能够保持通信
https://blog.csdn.net/qq_43290288/article/details/123478346

四:DataBinding + LiveData +ViewModel 实例

在 build.gradle 中添加 DataBinding 支持

android {dataBinding {enabled = true}
}

自定义MyViewModel.java

import android.view.View;import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;public class MyViewModel extends ViewModel {private MutableLiveData<Integer> aTeamScore;private MutableLiveData<Integer> bTeamScore;public MutableLiveData<Integer> getaTeamScore() {if(aTeamScore == null) {aTeamScore = new MutableLiveData<>();aTeamScore.setValue(0);}return aTeamScore;}public MutableLiveData<Integer> getbTeamScore() {if(bTeamScore == null) {bTeamScore = new MutableLiveData<>();bTeamScore.setValue(0);}return bTeamScore;}public void aTeamAdd(View view) {aTeamScore.setValue(aTeamScore.getValue() + 1);}public void bTeamAdd() {bTeamScore.setValue(bTeamScore.getValue() + 1);}
}

MainActivity.java

import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;import android.database.DatabaseUtils;
import android.os.Bundle;import com.example.mvvm20220312.databinding.ActivityMainBinding;
import com.example.mvvm20220312.viewmodel.MyViewModel;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); // ActivityMainBinding 对应 activity_main.xmlMyViewModel viewModel  = new ViewModelProvider(this, new ViewModelProvider.AndroidViewModelFactory(getApplication())).get(MyViewModel.class);binding.setViewModel(viewModel); // DataBinding 与 ViewModel 绑定binding.setLifecycleOwner(this); // 要想在绑定类中使用 LiveData 对象,我们需要指定生命周期所有者来定义 LiveData 对象的范围。在绑定类实例化后指定 activity 作为生命周期所有者}}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"tools:context=".MainActivity"><data><variablename="viewModel"type="com.example.mvvm20220312.viewmodel.MyViewModel" /></data><androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/textView2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{String.valueOf(viewModel.getaTeamScore())}"android:textSize="36sp"tools:text="10"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.252"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.174" /><TextViewandroid:id="@+id/textView3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{String.valueOf(viewModel.getbTeamScore())}"android:textSize="36sp"tools:text="10"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.588"app:layout_constraintStart_toEndOf="@+id/textView2"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.174" /><Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.207"android:onClick="@{viewModel::aTeamAdd}"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/textView2"android:text="蓝队"app:layout_constraintVertical_bias="0.499" /><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="红队"android:onClick="@{() -> viewModel.bTeamAdd()}"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.755"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/textView3"app:layout_constraintVertical_bias="0.499" /></androidx.constraintlayout.widget.ConstraintLayout>
</layout>

学习内容来自动脑学院~

Andriod --- JetPack (五):DataBinding + LiveData +ViewModel 简单实例相关推荐

  1. Andriod --- JetPack (七):Room + ViewModel + LiveData 增删改查实例

    1.Andriod - JetPack (一):初识 JetPack 2.Andriod - JetPack (二):LifeCycle 的诞生 3.Andriod - JetPack (三):Vie ...

  2. Andriod --- JetPack (三):ViewModel 的诞生

    1.Andriod - JetPack (一):初识 JetPack 2.Andriod - JetPack (二):LifeCycle 的诞生 3.Andriod - JetPack (三):Vie ...

  3. Andriod --- JetPack (六):Room 增删改查

    1.Andriod - JetPack (一):初识 JetPack 2.Andriod - JetPack (二):LifeCycle 的诞生 3.Andriod - JetPack (三):Vie ...

  4. Andriod --- JetPack (四):BaseObservable 与 ObservableField 双向绑定

    1.Andriod - JetPack (一):初识 JetPack 2.Andriod - JetPack (二):LifeCycle 的诞生 3.Andriod - JetPack (三):Vie ...

  5. Andriod --- JetPack (二):LifeCycle 的诞生

    1.Andriod - JetPack (一):初识 JetPack 2.Andriod - JetPack (二):LifeCycle 的诞生 3.Andriod - JetPack (三):Vie ...

  6. Andriod --- JetPack (一):初识 JetPack

    1. Andriod --- JetPack (一):初识 JetPack 2. Andriod --- JetPack (二):LifeCycle 的诞生 3. Andriod --- JetPac ...

  7. Android的MvVM模式探讨: Databinding 与 ViewModel+LiveData+Repository对比

    Mvvm模式: Databinding 与 ViewModel+LiveData+Repository 作者:Yagami3zZ,转自:https://www.jianshu.com/p/e7628d ...

  8. Mvvm模式: Databinding 与 ViewModel+LiveData+Repository

    前言: 本文主要是对常见设计模式的一些分析,以及讲述在Android项目中实现Mvvm模式的两种方式.通过Databinding或者ViewModel+LiveData+Repository如何实现M ...

  9. 安卓Android ViewModel 超简单实例

    安卓Android ViewModel 超简单实例 文章目录 安卓Android ViewModel 超简单实例 前言 使用步骤 1.引入库 2.继承ViewModel 并定义一个对象 3.到处去用 ...

最新文章

  1. 【每日DP】day12、P1063 能量项链(区间DP又一模板,震惊,只需要4行代码?)难度⭐⭐⭐
  2. hdu 1050 Moving Tables
  3. navigator对象介绍
  4. thinking-in-java(19)枚举类型
  5. vm中linux物理内存不足解决方案
  6. ecs服务器数据迁移_免费服务器迁移上云实践分享!一键迁云,自动同步
  7. VLFeat在matlab中的使用
  8. java 多站点_Java 并发编程整体介绍 | 内含超多干货
  9. 用vue-wechat-title为微信动态设置标题
  10. Java 后台开发实习经历
  11. 把手机作为网站服务器,如何利用废旧手机打造网站服务器
  12. android微信支付跳转逻辑,Android对接微信支付
  13. centos 7查看CPU温度
  14. linux用户登陆报错Resource temporarily unavailable
  15. 无锡室内设计培训——ps难学吗?
  16. 智能abc是什么输入法:win10可用的智能abc输入法免费下载
  17. .net EF 新手教程
  18. 蓝桥杯python基础练习
  19. 我的Vu啊(vue 2.0,数据监听,计算属性,组件传参)
  20. 《Adobe Fireworks CS5中文版经典教程》——1.6 撤销操作

热门文章

  1. 移动应用开发过程中的迭代式原型设计
  2. CMake 学习笔记 —— 进阶
  3. NIOS II 创建示例设计_Quartus II 9.0
  4. 五个最不流行的桌面环境
  5. 创业必看:中国八大草根富豪发家史
  6. 通过live555实现H264 RTSP直播(Windows版)
  7. 用ACE的Reactor模式实现网络通讯的例子
  8. 论文笔记:ShuffleNet v1
  9. python 多分类 recall_python实现二分类和多分类的ROC曲线教程
  10. java r$_基于javacv的人脸检测Demo