Android Studio 之 DataBing ,不需要再一个个findViewById了
使用DataBinding,不需要再一个个findViewById了
1.在 build.gradel 中 添加下面语句
dataBinding{
enabled true
}
2.在 activity_main.xml 文件中 点小灯炮,自动生成 data 结点
3.在 MainActivity.java 中能得到一个新的类, ActivityMainBinding(此类取Activity名称,这个类不是固定的) ActivityMainBinding binding
4.对 绑定的实例 进行绑定 binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
5.然后在MainActivity.java 文件中,直接用 binding.控件名,进行访问控件,不需要再像之前一样,一个个定义控件变量了,也不需要一个个控件进行 findViewById() 了
6.之前的 setContentView(R.layout.activity_main); 这句方法也不需要写了,直接屏蔽掉
7.在 activity_main.xml 文件中,对控件进行数据回绑
<data>
<variable
name="data"
type="com.example.databinding.MyViewModel" />
</data>
在 <data> 结点中声明 数据变量,
在 textView 或 其他内容控件中,都可以使用 data 这个变量进行数据绑定
如:android:text="@{String.valueOf(data.number)}" 直接把 MyViewModel 中的 number 值绑定到控件上
android:onClick="@{()->data.add()}" 调用 MyViewModel 中的方法
1. ViewModel 类
package com.example.databinding; import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel; public class MyViewModel extends ViewModel {
private MutableLiveData<Integer> number;
public MutableLiveData<Integer> getNumber(){
if(number==null)
{
number = new MutableLiveData<>();
number.setValue(0);
}
return number;
} public void add(){
number.setValue(number.getValue()+1);
}
}
2.MainActivity 类
package com.example.databinding; import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.ViewModelProviders; import com.example.databinding.databinding.ActivityMainBinding; public class MainActivity extends AppCompatActivity {
TextView textView;
Button button;
MyViewModel myViewModel;
ActivityMainBinding binding; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); /*
改造步骤:使用DataBinding
1.在 build.gradel 中 添加下面语句
dataBinding{
enabled true
}
2.在 activity_main.xml 文件中 点小灯炮,自动生成 data 结点
3.在 MainActivity.java 中能得到一个新的类, ActivityMainBinding(此类取Activity名称,这个类不是固定的) ActivityMainBinding binding
4.对 绑定的实例 进行绑定 binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
5.然后在MainActivity.java 文件中,直接用 binding.控件名,进行访问控件,不需要再像之前一样,一个个定义控件变量了,
也不需要一个个控件进行 findViewById() 了
6.之前的 setContentView(R.layout.activity_main); 这句方法也不需要写了,直接屏蔽掉
7.在 activity_main.xml 文件中,对控件进行数据回绑
<data>
<variable
name="data"
type="com.example.databinding.MyViewModel" />
</data>
在 <data> 结点中声明 数据变量,
在 textView 或 其他内容控件中,都可以使用 data 这个变量进行数据绑定
如:android:text="@{String.valueOf(data.number)}" 直接把 MyViewModel 中的 number 值绑定到控件上
android:onClick="@{()->data.add()}" 调用 MyViewModel 中的方法
*/ //setContentView(R.layout.activity_main);
binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
/*
textView = findViewById(R.id.textView);
button = findViewById(R.id.button); */ myViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
binding.setData(myViewModel); //监听用它来替换了
binding.setLifecycleOwner(this); //这句不能少,否则数据不显示
/*
myViewModel.getNumber().observe(this, new Observer<Integer>() {
@Override
public void onChanged(Integer integer) {
binding.textView.setText(String.valueOf(integer));
}
}); binding.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
myViewModel.add();
}
}); */ }
}
Android Studio 之 DataBing ,不需要再一个个findViewById了的更多相关文章
- Android Studio 的安装和配置篇(Windows篇)
上一篇介绍完了Android Studio,这一篇就专门来讲讲怎么安装配置的吧. 其实好多人都卡到安装配置这一步,想当初我也是,万恶的XX防火墙,导致下载Android Studio 的gradle异 ...
- Android Studio导入Fresco
大概一周之前,Facebook开源了专为Android系统定制的图片下载缓存工具,当天该消息就上了各大技术论坛网站的头条,也成为了各个技术群里讨论的最主要的话题.也就在当天stay4it的QQ群里面就 ...
- android studio 安装总结
Android Studio 的安装和配置篇(Windows篇<转> http://www.jianshu.com/p/fc03942548cc# 中间gradle下载比较慢:解决方法 需 ...
- Android Studio 每次运行都会再下载一遍,修改
Android Studio 每次运行都会再下载一遍 把 gradle 设置 use local gradle distribution
- Android Studio 多个编译环境配置 多渠道打包 APK输出配置
看完这篇你学到什么: 熟悉gradle的构建配置 熟悉代码构建环境的目录结构,你知道的不仅仅是只有src/main 开发.生成环境等等环境可以任意切换打包 多渠道打包 APK输出文件配置 需求 一般我 ...
- android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测
目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. (原创:转载声明出处:http://www.cnblogs.com/lin ...
- 使用 Android Studio 检测内存泄漏与解决内存泄漏问题
本文在腾讯技术推文上 修改 发布. http://wetest.qq.com/lab/view/63.html?from=ads_test2_qqtips&sessionUserType=BF ...
- 【走过巨坑】android studio对于jni调用及运行闪退无法加载库的问题解决方案
相信很多小伙伴都在android开发中遇到调用jni的各种巨坑,因为我们不得不在很多地方用到第三方库so文件,然而第三方官方通常都只会给出ADT环境下的集成方式,而谷歌亲儿子android studi ...
- android studio你可能忽视的细节——启动白屏?drawable和mipmap出现的意义?这里都有!!!
android studio用了很久了,也不知道各位小伙伴有没有还在用eclipse的,如果还有,楼主真心推荐转到android studio来吧,毕竟亲儿子,你会知道除了启动速度稍微慢些,你找不到一 ...
随机推荐
- Python基础之面向对象编程
面向对象编程 —— Object Oriented Programming 简写 OOP 01. 面向对象基本概念 我们之前学习的编程方式就是 面向过程 的 面向过程 和 面向对象,是两种不同的 编程 ...
- 使用别的电脑连接另一台电脑当中的虚拟机中的kylin项目
环境说明: 本机A的ip:192.168.0.242 服务器B的ip:192.168.0.125 服务器上的虚拟机C的ip:192.168.43.129 目前状态: B上面能访问C上的站点kylin站 ...
- Windows中常用工具
护眼软件 f.lux https://justgetflux.com/ Typora https://www.typora.io/ Markdown工具,小巧,方便. Snipaste https:/ ...
- 8.Javascript-map、reduce、filter 等高阶函数
高阶函数 高阶函数是对其他函数进行操作的函数,可以将它们作为参数或通过返回它们.简单来说,高阶函数是一个函数,它接收函数作为参数或将函数作为输出返回. 例如Array.prototype.map,Ar ...
- Vue学习之路由vue-router小结(九)
一.路由: 1.后端路由: 对于普通网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源: 2.前端路由: 对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页 ...
- Java 之 线程池
一.线程池思想概述 如果使用线程的时候就去创建一个线程,这样实现起来非常简便,但是会出现一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低 ...
- RabbitMQ启动出现的问题与解决办法
问题1 使用命令启动 service rabbitmq-server start 报错如下: Starting rabbitmq-server (via systemctl): Job for rab ...
- SSM相关知识梳理面试
- 安装socketio出现module 'importlib._bootstrap' has no attribute 'SourceFileLoader' 错误
安装socketio出现module 'importlib._bootstrap' has no attribute 'SourceFileLoader' 错误 执行: pip install --u ...
- 【故障处理】imp-00051,imp-00008
[故障处理]imp-00051,imp-00008 1.1 BLOG文档结构图 1.2 故障分析及解决过程 imp导入报错: IMP-00051: Direct path exported dum ...