Android MVVM简单配置--data Binding Library

MVVM:Model-代表你的基本业务逻辑    View-显示的内容    ViewModel--将Model 和 View联系起来的对象

想要使用这种模式开发android程序可以使用Google提供的一种方式 data Binding Library

最低要求:API level7  Gradle 15.0

在android6.0的API中如图:

第一步:在build.gradle(Module:app)中添加dataBinding,然后点击右上角的同步

  1. android {
  2. dataBinding{
  3. enabled=true;
  4. }

启用dataBinding

第二步:创建一个JAVA BEAN对象  本例以User(userName,password)对象为例

  1. public class User {
  2. public String userName;
  3. public String password;
  4. }

修饰符是public  不需要getter,setter方法

再创建一个Event对象  UserEvent.java

这样就可以将user对页面上的控件的值进行对应,修改控件的值会自己修改user对象的值,反之亦然

  1. public class UserEvent {
  2. private User user;
  3. //构造函数,将user传进来
  4. public UserEvent(User user) {
  5. this.user = user;
  6. }
  7. //对userName的监听
  8. public TextWatcher userNameWatcher = new TextWatcher() {
  9. @Override
  10. public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  11. }
  12. @Override
  13. public void onTextChanged(CharSequence s, int start, int before, int count) {
  14. }
  15. @Override
  16. public void afterTextChanged(Editable s) {
  17. //将改变后的值给user对象
  18. user.userName = s.toString();
  19. }
  20. };
  21. //对password的监听
  22. public TextWatcher passwordWatcher = new TextWatcher() {
  23. @Override
  24. public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  25. }
  26. @Override
  27. public void onTextChanged(CharSequence s, int start, int before, int count) {
  28. }
  29. @Override
  30. public void afterTextChanged(Editable s) {
  31. //将改变后的值给user对象
  32. user.password=s.toString();
  33. }
  34. };
  35. }

创建一个事件的监听对象MyHandler.java

  1. public class MyHandler {
  2. private User user;
  3. private Activity context;
  4. private ProgressDialog pd;
  5. //构造传参
  6. public MyHandler(User user,Activity context,ProgressDialog pd){
  7. this.user=user;
  8. this.context=context;
  9. this.pd=pd;
  10. }
  11. //登录事件
  12. public void onClickLoginUser(View v){
  13. if(TextUtils.isEmpty(user.userName) || TextUtils.isEmpty(user.password)){
  14. showToast("用户名或密码为空");
  15. }else{
  16. pd.show();
  17. new Thread(new Runnable() {
  18. @Override
  19. public void run() {
  20. //判断是否登录成功
  21. UserLoginNet net=new UserLoginNet();
  22. if(net.sendUserInfo(user)){
  23. showToast("欢迎回来:"+user.userName);
  24. }else{
  25. showToast("用户名或密码错误");
  26. }
  27. }
  28. }).start();
  29. }
  30. }
  31. private void showToast(final String content){
  32. context.runOnUiThread(new Runnable() {
  33. @Override
  34. public void run() {
  35. Toast.makeText(context,content,Toast.LENGTH_SHORT).show();
  36. pd.dismiss();
  37. }
  38. });
  39. }
  40. }

第三步:在布局文件最外层添加

  1. <layout xmlns:android="http://schemas.android.com/apk/res/android">
  2. <data>
  3. <variable
  4. name="event"
  5. type="com.example.yangzhi.mvvm.UserEvent"></variable>
  6. <variable
  7. name="handler"
  8. type="com.example.yangzhi.mvvm.MyHandler"></variable>
  9. </data>
  10. </layout>

将原布局文件的xmlns:android="http://schemas.android.com/apk/res/android"

放到现在的<layout>中

然后在控件的属性中添加: addTextChangedListener需要自己输入,我试了一下没有提示,也不需要android:text属性

  1. addTextChangedListener="@{event.userNameWatcher}"

整体代码

  1. <EditText
  2. addTextChangedListener="@{event.userNameWatcher}"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content"
  5. android:hint="请输入用户名" />
  6. <EditText
  7. addTextChangedListener="@{event.passwordWatcher}"
  8. android:layout_width="match_parent"
  9. android:layout_height="wrap_content"
  10. android:hint="请输入密码" />
  11. <Button
  12. android:layout_width="match_parent"
  13. android:layout_height="wrap_content"
  14. android:onClick="@{handler.onClickLoginUser}"
  15. android:text="登录" />

button的设置点击事件得注意一下,可别忘了

其它布局不变

第四步:在MainActivity.java的onCreate方法中的配置

  1. ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
  2. //这个就不再需要
  3. //setContentView(R.layout.activity_main);
  4. user = new User();
  5. UserEvent event = new UserEvent(user);
  6. binding.setEvent(event);
  7. ProgressDialog pd=new ProgressDialog(this);
  8. MyHandler myHandler=new MyHandler(user,this,pd);
  9. binding.setHandler(myHandler);

整体代码,其实就上述代码:

  1. public class MainActivity extends AppCompatActivity {
  2. private User user;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
  7. //这个就不再需要
  8. //setContentView(R.layout.activity_main);
  9. user = new User();
  10. UserEvent event = new UserEvent(user);
  11. binding.setEvent(event);
  12. ProgressDialog pd=new ProgressDialog(this);
  13. MyHandler myHandler=new MyHandler(user,this,pd);
  14. binding.setHandler(myHandler);
  15. }
  16. }

整个activity的代码就上面那一点,其它的操作都放到其它文件中去了,不管是与控件相关的还是联网操作的都在其它文件

来自为知笔记(Wiz)

时间: 2024-10-11 18:56:15

Android MVVM简单配置--data Binding Library的相关文章

Android Data Binding Library 官方文档(译)

地址:https://developer.android.google.cn/topic/libraries/data-binding/index.html 本文地址:http://blog.csdn.net/jjwwmlp456/article/details/54915981 Data Binding Library (数据绑定库),旨在减少绑定应用程序逻辑和布局所需的一些耦合性代码 最低支持Android 2.1 (API Level 7) 构建环境 使用gradle插件1.5-alpha

告别findViewById(),ButterKnife,使用Google Data Binding Library(1)

Data Binding Library 用数据绑定编写声名性布局,可以最大限度的减少findViewById(),setOnClickListener()之类的代码.并且比起findViewById(),所有view是一次性初始化完成,性能更快. Data Binding Library具有灵活性和不错的兼容性,支持2.1以后的版本. 需要 Android Plugin for Gradle 1.5.0-alpha1或以上版本. 至于怎么升级? https://developer.androi

Android开发教程 - 使用Data Binding(二)集成与配置

安装依赖库,配置工程 Data Binding安装和配置都非常简单,仅需简单的两步即可完成. 更新SDK 打开SDK管理工具,下载最新的Android Support库. 配置工程的Gradle android { - dataBinding { enabled = true } } 加入完成后,然后点击Sync Now,完成后就可以使用Data Binding强大的功能了. 总结 这一篇我们介绍了Data Binding的配置,下一篇我们将介绍在Activity中使用Data Binding的

Android开发教程 - 使用Data Binding(一) 介绍

引言 Data Binding(数据绑定)发布于2015年的Google I/O大会,旨在减少Android开发中的大量模板代码(比如findViewById()),增加代码及逻辑清晰度,提高开发效率和维护效率. 什么是Data Binding Data Binding,即数据绑定,是Android团队实现MVVM架构的一种方法,使得数据(对象)可以直接绑定到布局的xml中,数据的变化直接反映到View上. 同时,Data Binding也支持双向绑定. 有什么好处 省去大量模板代码,比如fin

Data Binding Library(数据绑定库)

引子 上图中有一些 TextView 和 Button 等,正常情况下,互联网APP都会从服务器抓取数值,然后在 Activity中 findViewById 再进行setText等等.这篇文章就是用来解放你的双手劳动力 的,使用数据绑定库可以不用去findView不用在写繁琐的 setText,只要从服务器获取json 转换成 javaBean格式然后 set,duang,,,,, 所有的值就自己展现在该有的地方了. Demo: https://github.com/Afra55/DataBi

传智播客揭秘Android 6.0之Data Binding Guide

前言:Data Binding 解决了 Android UI 编程中的一个痛点,官方原生支持 MVVM 模型可以让我们在不改变既有代码框架的前提下,非常容易地使用这些新特性.其实在此之前,已经有些第三方的框架(RoboAndroid) 可以支持 MVVM 模型,无奈由于框架的侵入性太强,导致一直没有流行起来. 1.准备: Android Studio 更新到1.3或者更高 2.注意: Data Binding 是一个 support 包 3.新建一个Project: u 修改Project的Bu

Android开发教程 - 使用Data Binding(三)在Activity中的使用

修改activity布局 如果使Activity支持Data Binding,在布局的最外层加入"<layout>"标签即可,由于是加在最外层,所以即使重构现有工程,所做的修改也非常简单,并不会影响现有的布局结构. 以下以MainActivity进行举例. 修改前activty_main.xml的布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmln

Android开发教程 - 使用Data Binding(八)使用自定义Interface

为什么要使用自定义Interface 我们平常在Android的开发中,比如如果要设置一个View的点击事件,通常通过view.setOnClickListener()来实现的,这种方式略显繁琐,而且要通过findViewById()来获取到此View的引用.使用了Data Binding技术以后,我们无需这样做,可以直接通过在xml布局文件中设置一个Interface的实现来直接调用某个方法,非常方便. 除了上面说的方便之外,当两个Fragment之间需要通信时,Android是强烈不建议两个

Android开发教程 - 使用Data Binding Android Studio不能正常生成相

有时候新建布局文件时或者定义布局中的变量时,不能即时生成相关Binding类或方法(其实是不能正确索引),也许是IDE支持的一些BUG,不过Android Studio对Data Binding的支持问题也仅限于这些,并且可以比较简单地解决这些问题. 方法一(经常不起作用): 菜单 -> Build -> Clean Project -> Rebuild Project 方法二(推荐): 关闭Android Studio,重新打开. 此时工程会重新索引,大部分情况会正常. 方法三: 菜单