Andriod --- JetPack (五):DataBinding + LiveData +ViewModel 简单实例
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 简单实例相关推荐
- Andriod --- JetPack (七):Room + ViewModel + LiveData 增删改查实例
1.Andriod - JetPack (一):初识 JetPack 2.Andriod - JetPack (二):LifeCycle 的诞生 3.Andriod - JetPack (三):Vie ...
- Andriod --- JetPack (三):ViewModel 的诞生
1.Andriod - JetPack (一):初识 JetPack 2.Andriod - JetPack (二):LifeCycle 的诞生 3.Andriod - JetPack (三):Vie ...
- Andriod --- JetPack (六):Room 增删改查
1.Andriod - JetPack (一):初识 JetPack 2.Andriod - JetPack (二):LifeCycle 的诞生 3.Andriod - JetPack (三):Vie ...
- Andriod --- JetPack (四):BaseObservable 与 ObservableField 双向绑定
1.Andriod - JetPack (一):初识 JetPack 2.Andriod - JetPack (二):LifeCycle 的诞生 3.Andriod - JetPack (三):Vie ...
- Andriod --- JetPack (二):LifeCycle 的诞生
1.Andriod - JetPack (一):初识 JetPack 2.Andriod - JetPack (二):LifeCycle 的诞生 3.Andriod - JetPack (三):Vie ...
- Andriod --- JetPack (一):初识 JetPack
1. Andriod --- JetPack (一):初识 JetPack 2. Andriod --- JetPack (二):LifeCycle 的诞生 3. Andriod --- JetPac ...
- Android的MvVM模式探讨: Databinding 与 ViewModel+LiveData+Repository对比
Mvvm模式: Databinding 与 ViewModel+LiveData+Repository 作者:Yagami3zZ,转自:https://www.jianshu.com/p/e7628d ...
- Mvvm模式: Databinding 与 ViewModel+LiveData+Repository
前言: 本文主要是对常见设计模式的一些分析,以及讲述在Android项目中实现Mvvm模式的两种方式.通过Databinding或者ViewModel+LiveData+Repository如何实现M ...
- 安卓Android ViewModel 超简单实例
安卓Android ViewModel 超简单实例 文章目录 安卓Android ViewModel 超简单实例 前言 使用步骤 1.引入库 2.继承ViewModel 并定义一个对象 3.到处去用 ...
最新文章
- 【每日DP】day12、P1063 能量项链(区间DP又一模板,震惊,只需要4行代码?)难度⭐⭐⭐
- hdu 1050 Moving Tables
- navigator对象介绍
- thinking-in-java(19)枚举类型
- vm中linux物理内存不足解决方案
- ecs服务器数据迁移_免费服务器迁移上云实践分享!一键迁云,自动同步
- VLFeat在matlab中的使用
- java 多站点_Java 并发编程整体介绍 | 内含超多干货
- 用vue-wechat-title为微信动态设置标题
- Java 后台开发实习经历
- 把手机作为网站服务器,如何利用废旧手机打造网站服务器
- android微信支付跳转逻辑,Android对接微信支付
- centos 7查看CPU温度
- linux用户登陆报错Resource temporarily unavailable
- 无锡室内设计培训——ps难学吗?
- 智能abc是什么输入法:win10可用的智能abc输入法免费下载
- .net EF 新手教程
- 蓝桥杯python基础练习
- 我的Vu啊(vue 2.0,数据监听,计算属性,组件传参)
- 《Adobe Fireworks CS5中文版经典教程》——1.6 撤销操作