databinding

GitHub标星4.6K+!手写一款基于MVVM模式开发框架,完美实现事件与数据源绑定!

删除回忆录丶 提交于 2020-04-08 14:03:26
前言 目前,Android流行的MVC、MVP模式的开发框架很多,然而一款基于MVVM模式开发框架却很少。MVVMHabit是以谷歌DataBinding+LiveData+ViewModel框架为基础,整合Okhttp+RxJava+Retrofit+Glide等流行模块,加上各种原生控件自定义的BindingAdapter,让事件与数据源完美绑定的一款容易上瘾的实用性MVVM快速开发框架。从此告别findViewById(),告别setText(),告别setOnClickListener()... 框架流程 框架特点 快速开发 只需要写项目的业务逻辑,不用再去关心网络请求、权限申请、View的生命周期等问题,撸起袖子就是干。 维护方便 MVVM开发模式,低耦合,逻辑分明。Model层负责将请求的数据交给ViewModel;ViewModel层负责将请求到的数据做业务逻辑处理,最后交给View层去展示,与View一一对应;View层只负责界面绘制刷新,不处理业务逻辑,非常适合分配独立模块开发。 流行框架 retrofit + okhttp + rxJava 负责网络请求; gson 负责解析json数据; glide 负责加载图片; rxlifecycle 负责管理view的生命周期;与网络请求共存亡; rxbinding 结合databinding扩展UI事件;

一行Java代码实现RecyclerView的Adapter?一行都不需要!

随声附和 提交于 2020-04-07 04:56:19
单类型列表的实现 先看下MainActivity的java代码 public class MainActivity extends AppCompatActivity { //要展示的数据源 public final ObservableArrayList<Student> showDatas = new ObservableArrayList<>(); { //初始化数据源 for (int i = 0; i < 20; i++) { students.add(new Student("学生:" + i)); } showDatas.addAll(students); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //完成数据和布局的绑定 ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); binding.setActivity(this); } public void onBindItem(ViewDataBinding binding, Object data, int position) {

使用DataBinding出现java.lang.ClassNotFoundException: javax.xml.bind.JAXBException

为君一笑 提交于 2020-03-16 21:05:00
查找了多个网站,知道了是因为Java9以上出现的这个错误,试了很多大家的建议都无效,通过 这篇帖子 发现,在gradle中: 指定Java的版本是无效 compileOptions { sourceCompatibility JavaVersion . VERSION_1_8 targetCompatibility JavaVersion . VERSION_1_8 } 添加下面依赖无效 dependencies { classpath "javax.xml.bind:jaxb-api:2.3.1" classpath "com.sun.xml.bind:jaxb-core:2.3.0" classpath "com.sun.xml.bind:jaxb-impl:2.3.1" classpath "javax.activation:activation:1.1.1" } 结合一个答者的这句话: “根据Android Bug Tracker上的Android项目成员,截至2019-03-07: Android studio及其工具不支持Java 11。” 我果断卸载了java11,安装java8,经测试果然正常了。 现在已经是2020年3月了,怎么还不支持java11。 所以综上,如果你是做练习学习dataBinding,快速解决的话就降低JDK版本到Java8

面试官:“会不会熟练使用Jetpack” 我:“......”

北城以北 提交于 2020-03-11 01:12:33
面向标准化开发已成现实 金三银四,相信有不少读者在抓紧机会面试。 Android 市场已今非昔比。在过去,迫于招人的压力,应试者只需了解四大组件、视图、网络请求,即可谋得一份满意的工作。 现如今,Jetpack 架构组件 及 标准化开发模式 的确立,意味着 Android 开发已步入成熟阶段: 许多 样板代码 不再需要开发者手写,而是可以通过模版工具 自动生成,在取缔繁杂耗时的重复工作的同时, 避免因人工操作的疏忽,而造成难以排查、不可预期的错误 。 这十分符合企业的利益,因而面试官在招人的时候,也更加看重应试者对 架构组件 —— 至少是 MVVM 的理解程度。🧐 像“解耦”等 含糊其辞的说法,已经不能够被面试官所认可,稍微对 MVVM 有一点经验的面试官都会请你举例说明,好证明你确实对 MVVM 有着正确、深入的理解,能够自然而然地写出标准化、规范化的代码,能够迅速适应 各家公司自制的 自动化模版工具。 本文的目标 本人拥有 3 年的 移动端架构 践行和设计经验,领导团队重构的中大型项目多达十数个,对 Jetpack MVVM 架构在确立规范化、标准化 开发模式 以减少不可预期的错误 所作的努力,有着深入的理解。 因而本文的目标,就是结合前几期我们分别 深入浅出 介绍过的 Lifecycle、LiveData、ViewModel、DataBinding,来融汇贯通地演绎一下:

JetPack--Databing使用

梦想的初衷 提交于 2020-03-06 09:09:03
JetPack–Databing使用 简单使用 1.配置dataBinding dataBinding { enabled = true } 2.布局 这里的布局文件和普通的Android 布局文件不一样,是以layout 开头,你可以像写普通布局一样,先写完UI结构,然后通过转换成Databind的这种结构。 光标放到布局的根控件上,alt+insert ,选择convert to data binding layout. 就生成了以下形式,很简单。 < ? 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" > < data > //代表布局文件对接的数据有哪些,什么类型 < variable // 变量 name = "user" type = "com.example.myapplication.User" / > < import type = "com.example.myapplication.User" / > // 导入对象的包名 < / data > <

DataBinding简单使用入门

一世执手 提交于 2020-03-03 05:05:20
DataBinding 是什么 DataBinding 是 Google 推出的一个数据绑定的支持库,它可以将数据和UI 进行绑定,能够让 UI 随着数据变化而变化,也可以让数据随着UI 变化而变化,无需再写代码去更新UI 或数据 它解决了两个问题: 1. 麻烦的 findViewById () 2. 更新 UI 数据需切换至 UI 线程 MVVM架构 (Model–View– ViewModel ) 当 View 有用户输入后, ViewModel 通知 Model 更新数据,同理Model 数据更新后, ViewModel 通知 View 更新,DataBinding 直接就实现了这种架构,相当于我们只写View 和 Model 并绑定, ViewModel 会由DataBinding自己实现 DataBinding 的使用准备 Android Studio 版本在 1.3 以上 gradle 版本在 1.5.0-alpha1 以上 在app的 build.gradle 中添加(标红部分): android { .... dataBinding { enabled =true } } DataBinding 的使用(只写了关键代码) 布局文件 :例如login.xml 布局文件结构如下,最外层必须为layout标签,data标签相当于java文件

ViewModel、LiveData、DataBinding

若如初见. 提交于 2020-02-22 19:47:57
ViewModel ViewModel的引入 如果系统销毁或重新创建界面控制器,则存储在其中的任何临时性界面相关数据都会丢失。例如,应用的某个 Activity 中可能包含用户列表。因配置更改而重新创建 Activity 后,新 Activity 必须重新提取用户列表。对于简单的数据,Activity 可以使用 onSaveInstanceState() 方法从 onCreate() 中的捆绑包恢复其数据,但此方法仅适合可以序列化再反序列化的少量数据,而不适合数量可能较大的数据,如用户列表或位图。 架构组件为界面控制器提供了 ViewModel 辅助程序类,该类负责为界面准备数据。 在配置更改期间会自动保留 ViewModel 对象 ,以便它们存储的数据立即可供下一个 Activity 或 Fragment 实例使用。 实现ViewModel package com.zyb.viewmodeltest; import androidx.lifecycle.ViewModel; public class MyViewModel extends ViewModel { public int num = 0; } 从 Activity 访问该列表,如下所示: package com.zyb.viewmodeltest; import androidx.appcompat.app

DataBinding

半腔热情 提交于 2020-02-12 07:55:31
一、DataBinding 1.1 在Module的build.gradle android模块中添加如下配置 代码地址 https://github.com/MichealPan9999/DataBinding-MVVM android { dataBinding { enabled = true } }   Android Studio中是依靠gradle来管理项目的,在创建一个项目时,从开始创建一直到创建完毕,整个过程是需要执行很多个gradle task的,这些task有很多是系统预先帮我们定义好的,比如build task,clean task等,DataBinding相关的task也是系统预先帮我们定义好的,但是默认情况下,DataBinding相关的task在task列表中是没有的,因为我们没有开启dataBinding,但是一旦我们通过 dataBinding{enabled = true}的方式开启DataBinding之后,DataBinding相关的task就会出现在task列表中,每当我们执行编译之类的操作时,就会执行这些dataBinding Task, 这些task的作用就是检查并生成相关dataBinding代码,比如dataBindingExportBuildInfoDebug这个task就是用来导出debug模式下的build信息的。 1.2

2.11 DataBinding 简单使用

≡放荡痞女 提交于 2020-02-11 21:16:54
DataBindIng 在我理解看来类似于其他语言当中的全局变量,只修改一处就可全部修改 添加位置和代码如下: 打开DataBinding 开关: 1 dataBinding { 2 enabled true 3 } xml 添加layout 涵盖 并将所有的需要声明的组件移动到activity的xml的文件当中,使main 文件更简洁 1 <?xml version="1.0" encoding="utf-8"?> 2 <layout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools"> 5 6 <data> 7 8 </data> 9 10 <androidx.constraintlayout.widget.ConstraintLayout 11 android:layout_width="match_parent" 12 android:layout_height="match_parent" 13 tools:context=".MainActivity"> 14 15 <TextView 16

安卓基础(LiveData DataBinding)

别说谁变了你拦得住时间么 提交于 2020-02-11 20:10:15
昨天因为有点事情,没有及时发表博客,昨天学习了LiveData和DataBinding,LiveData属于jetpack中的框架里面的,DataBinding可以进行数据绑定。 我分别利用这两部分知识做了一个实例,可以进行对比一下。 LiveData: java/MainAcitivity: package com.example.livedatetest; import android.arch.lifecycle.Observer; import android.arch.lifecycle.ViewModelProvider; import android.arch.lifecycle.ViewModelProviders; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.WindowInsets; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView;