当前位置: 首页 > news >正文

网络架构和管理/厦门seo外包

网络架构和管理,厦门seo外包,深圳Wordpress网站,谷歌网站建设#一、描述 MVC,MVP都是大家所熟知的,而今天的主题的MVVM数据绑定,这个是最新推出的框架,刚加入公司没多久,看公司里的同事再用这个,所以我熟悉之后发现确实挺好用的,在这里分享给大家。 #二、引…

#一、描述 MVC,MVP都是大家所熟知的,而今天的主题的MVVM数据绑定,这个是最新推出的框架,刚加入公司没多久,看公司里的同事再用这个,所以我熟悉之后发现确实挺好用的,在这里分享给大家。

#二、引用

Data Binding自从去年的Google I/O发布到至今,也有近一年的时间了。这一年来,从Beta到如今比较完善的版本,从Android Studio 1.3到如今2.1.2的支持,可以说Data Binding已经是一个可用度较高,也能带来实际生产力提升的技术了。

而事实上,真正使用到Data Binding的公司、项目仍然是比较少的。可能是出于稳定性考虑,亦或是对Data Binding技术本身不够熟悉,又或许对新技术没什么追求。

我司在新的产品中就全面使用了Data Binding技术,无论是我,还是新来直接面对Data Binding上手的工程师也好,都对其爱不释手,用惯了后简直停不下来。

希望在看完本文的介绍后,会有更多的朋友产生兴趣,来使用Data Binding,参与它的讨论。

#三、什么是DataBinding
这里我以我的理解来说,就是一个或者多个实体对象对应着一个页面,实体中的某些属性绑定着页面上的控件,当属性的值改变时,页面上的控件会自动更新数据。

#四、效果展示


####没用DataBinding之前
>XML布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.junwen.databinding.MainActivity"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="10dp"android:text="姓名:" /><TextViewandroid:id="@+id/activity_main_stu_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="10dp"android:text="学生姓名" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="10dp"android:text="年龄:" /><TextViewandroid:id="@+id/activity_main_stu_age"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="10dp"android:text="学生年龄" /></LinearLayout><Buttonandroid:id="@+id/activity_main_stu_setting"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="更改姓名" />
</LinearLayout>
复制代码

Student实体类


/*** 描述:学生对象* 作者:卜俊文* 创建:2016/8/10 10:20* 邮箱:344176791@qq.com*/
public class Student {private String name;private int age;public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}复制代码

MainActivity主页面

public class MainActivity extends AppCompatActivity {private TextView tv_name; //学生姓名private TextView tv_age; //学生年龄private Button btn_setting; //设置private Student student; //学生对象@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();initData();initListener();}/*** 描述:初始化控件* 作者:卜俊文* 邮箱:344176791@qq.com* 创建时间: 2016/8/10 10:17*/private void initView() {tv_name = (TextView) findViewById(R.id.activity_main_stu_name);tv_age = (TextView) findViewById(R.id.activity_main_stu_age);btn_setting = (Button) findViewById(R.id.activity_main_stu_setting);}/*** 描述:初始化数据* 作者:卜俊文* 邮箱:344176791@qq.com* 创建时间: 2016/8/10 10:19*/private void initData() {//创建一个学生对象student = new Student("俊文", 22);//根据学生对象赋值到控件上tv_name.setText(student.getName());tv_age.setText(String.valueOf(student.getAge()));}/*** 描述:初始化监听* 作者:卜俊文* 邮箱:344176791@qq.com* 创建时间: 2016/8/10 10:22*/private void initListener() {btn_setting.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//点击设置,更改Student对象的名字。student.setName("卜俊文");tv_name.setText(student.getName());}});}}复制代码

####运用DataBinding

XML布局

<layout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"><data><variablename="student"type="com.example.junwen.databinding.Student" /></data><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="10dp"android:text="姓名:" /><TextViewandroid:id="@+id/activity_main_stu_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="10dp"android:text="@{student.name}" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="10dp"android:text="年龄:" /><TextViewandroid:id="@+id/activity_main_stu_age"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="10dp"android:text="@{String.valueOf(student.age)}" /></LinearLayout><Buttonandroid:id="@+id/activity_main_stu_setting"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="更改姓名" /></LinearLayout>
</layout>  
复制代码

Student实体类

/*** 描述:学生对象, @Bindable注解是为了能在BR里面找到这个属性     notifyPropertyChanged();  这个方法是当调用的时候,会通知绑定的控件去改变值* 作者:卜俊文* 创建:2016/8/10 10:20* 邮箱:344176791@qq.com*/
public class Student extends BaseObservable {@Bindableprivate String name;@Bindableprivate int age;public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;notifyPropertyChanged(com.example.junwen.databinding.BR.name);}public int getAge() {return age;}public void setAge(int age) {this.age = age;notifyPropertyChanged(com.example.junwen.databinding.BR.age);}
}复制代码

MainActivity主页面

public class MainActivity extends AppCompatActivity {private ActivityMainBinding activity_main_binding; //本页面的Binding对象private Student student; //学生对象@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initData();initListener();}/*** 描述:初始化数据* 作者:卜俊文* 邮箱:344176791@qq.com* 创建时间: 2016/8/10 10:48*/private void initData() {//这个就类似于setContentViewactivity_main_binding = DataBindingUtil.setContentView(this, R.layout.activity_main);student = new Student("俊文", 22);//把Student对象绑定到布局的控件中去,现在开始只要student对象属性变化,控件的值也是相应改变activity_main_binding.setStudent(student);}/*** 描述:初始化监听* 作者:卜俊文* 邮箱:344176791@qq.com* 创建时间: 2016/8/10 10:22*/private void initListener() {activity_main_binding.activityMainStuSetting.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {student.setName("卜俊文");}});}}复制代码

#五、优劣所在?

####优势
(1) DataBinding不需要findviewbyId,只需要根据binding对象去查找到对应的控件。

(2)直接绑定一个对象到XML布局中,当对象的属性变化时,布局中的控件会马上同步变化。

(3)UI代码放到了xml中,布局和数据更紧密

####劣势
(1)IDE支持还不那么完善(提示、表达式)

(2)报错信息不那么直接

#六、开始编写
####(1) 在app / build.gradle 中加入以下字段,即可使用DataBinding框架

dataBinding {   enabled = true
}
复制代码

####(2)编写XML,这里给出一个XML模版

<layout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"><data><variablename="item"type="com.example.junwen.databinding.Student" /></data><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{item.name}" /></LinearLayout>
</layout>  
复制代码

此模块由标签作为根节点,里面包含两部分,第一部分是,第二部分就是,也就类似于以前我们写布局时的根布局。

其中标签中可以声明对象,变量以及导入包等功能,在这里我导入了Student对象,在下面我需要用到我就可以导入进来,并且起成item的一个别名。

其中中,包含了一个TextView,这个TextView的text属性值是这样赋值的(格式必须对):

android:text="@{item.name}"
复制代码

双引号中 " @{具体变量或者对象的属性值}" ,不只这些,还可以在里面运用表达式,例如上面的例子中的

 android:text="@{String.valueOf(student.age)}"
复制代码

这个能够在一个属性的后面添加字符串比如下面

android:text="@{item.progress+`%`}"
复制代码

####(3)编写MainActivity


(1)取得Binding对象,这个就类似于setContentView(),返回的对象其实是一个ViewDataBinding,但是我这里写的是ActivityMainBinding,你可以比较一下ActivityMainBinding 和 R.layout.activity_main有什么相似的地方吗?不错,就是拼接起来的,这样就可以获得这个页面的Binding对象。 ``` ActivityMainBinding activity_main_binding = DataBindingUtil.setContentView(this, R.layout.activity_main); ```

(2)创建一个Student对象,并且调用setStudent(student)方法,这个方法他会自动生成的,实现了实体与xml绑定。

Student student = new Student("俊文", 22);
//把Student对象绑定到布局的控件中去,现在开始只要student对象属性变化,控件的值也是相应改变
activity_main_binding.setStudent(student)
复制代码

(3)设置监听,直接通过binding对象查询到按钮控件,这个activityMainStuSetting也会自动生成的,如果遇到没有生成,你需要build一下项目,他就会出来了,执行setName方法,在其内部就会去通知控件更新文本。

activity_main_binding.activityMainStuSetting.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {student.setName("卜俊文");}});
复制代码

#七、其他
####操作符示例:

(1)判断属性赋值不同的图片

android:src="@{item.checkState.equals(String.valueOf(3)) ? @drawable/ic_task_exit :  @drawable/ic_task_success }" 
复制代码

(2)设置不同的字符串

android:text='@{error ? "error" : "ok"}'
复制代码

####XML的DataBinding模版XML快速创建
![1229.gif](http://upload-images.jianshu.io/upload_images/2650372-38fdce9dea94c712.gif?imageMogr2/auto-orient/strip)

####关于DataBinding数据绑定
Android官方数据绑定框架DataBinding
从零开始的Android新项目7 - Data Binding入门篇
Android官方数据绑定框架DataBinding(一)
Android Data Binding代码实战
完全掌握Android Data Binding
数据绑定DataBinding

#八、总结 在此就总结了一些基本的DataBind的用法,可能有些地方说的不到位的,也是刚接触不是很熟悉,就是凭自己的理解来说的。

欢迎关注我的微信公众号,分享更多技术文章。

转载于:https://juejin.im/post/5b3ac6a8f265da63145c4bfd

http://www.lbrq.cn/news/1028071.html

相关文章:

  • 电话销售企业网站怎么做/东莞做网站公司电话
  • 商城类网站建设方案/外贸建站seo
  • 青海省住房建设厅网站/宁波网络推广方式
  • 做社交的招聘网站/seo推广平台
  • 平板网站开发/唐山建站公司模板
  • 安平有做网站推广的吗/外链大全
  • 网站怎么做备份/竞价推广营销
  • 网站静态/微信营销的优势
  • 网站建设服务费下什么科目/合肥关键词排名
  • 上海做网站哪家好/百度点击软件找名风
  • 网站如何做背景音乐/新平台推广赚钱
  • 企业网站搭建 网络活动策划/百度网盘电脑版下载
  • 推广运营公司网站/seo免费
  • 给我免费播放片高清在线观看授他以柄电视剧/百度小程序对网站seo
  • 做企业网站合同/广东东莞大益队
  • 建立网站的公司杭州/免费外链发布平台
  • 做食品行业网站/今天有什么新闻
  • 北京网站制作收费标准/网络营销岗位职责和任职要求
  • 无锡模板建站源码/广州seo服务外包
  • 做泵阀生意到哪个网站/网站优化建议
  • 网站运营与维护是什么意思/seo发包技术教程
  • 怎么找出网站的备案号/外贸seo建站
  • 最简单的网站开发国际化/中国舆情观察网
  • 石家庄做网站最好的公司/2020年可用好用的搜索引擎
  • 同城做哪个网站推广效果好/抖音seo优化软件
  • 网站建设行业赚钱么/成都seo整站
  • 营销型网站展示/自己个人怎样做电商
  • 视频背景制作软件app/天津seo网站排名优化公司
  • wordpress设置新页面跳转/2022年seo还值得做吗
  • 网络公司网站源码/网页优化seo公司
  • C# 中 ArrayList动态数组、List<T>列表与 Dictionary<T Key, T Value>字典的深度对比
  • .NET 的 WebApi 项目必要可配置项都有哪些?
  • Linux学习-UI技术
  • HiSmartPerf使用WIFI方式连接Android机显示当前设备0.0.0.0无法ping通!设备和电脑连接同一网络,将设备保持亮屏重新尝试
  • 药房智能盘库系统:基于CV与时间序列预测的库存革命
  • 《算法导论》第 22 章 - 基本的图算法