Android Databinding 从入门到转行(二)添加点击事件
来源:互联网 发布:购物网站如何优化 编辑:程序博客网 时间:2024/06/07 04:50
转载请声明:http://blog.csdn.net/yoyo_newbie/article/details/51957578
需求二: 实现用户简介界面---已知用户名字为Sam, 年龄为25.进入界面时候,要求显示用户名字字段,年龄字段,内容都显示未加载,点击 “显示数据”才显示用户的数据
UI效果图:
使用databinding , 响应事件不在需要在activity里面添加, 而是在View Model里面添加!是不是很6?
关键代码
<Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="显示数据" android:onClick="@{userModel.freshUserInfoOnClick}" />
public class UserModel { ......................... /** * 点击刷新用户数据事件 */ public void freshUserInfoOnClick(View view) { ....... }}
在,实现需求之前。有个疑问,当我ViewModel的数据已经设置绑定初始化后,
我想第二次数据刷新,怎么通知刷新?
这种实现方式有2种,下面介绍推荐的一种,另外一种非常麻烦,不多说。
第一步,修改属性的类型
如:这里的name 的类型是String 改为
public ObservableField<String> name= new ObservableField<String>();
定义属性类型规则如下,
基本类型修改:
xxx 改为ObservableXXX
如
int ->ObservableInt
boolean ->ObservableBoolean
对象类型修改
xxx 改为
ObservableField<XXXXXX>
第二步,调用Observable的set()方法进行通知刷新
(注意:如果值相同不会执行view的绘制,如果依旧要通知刷新,调用notifyChange(),有人就问了,相同值还刷新有什么意义?学到后面就知道为什么需要了,本编暂时不解析)
关键代码:
public ObservableField<String> name= new ObservableField<String>();public ObservableField<String> age=new ObservableField<String>();........................
/** * 是刷新用户数据 */public void freshUserInfo(){ name.set("Sam") ; age.set("25");}
以下全部实现代码:
<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="userModel" type="com.yoyonewbie.mvvm.vm.UserModel" /> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:padding="16dp" android:orientation="vertical" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="姓名:" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{userModel.name}" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="@dimen/activity_vertical_margin" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="年龄:" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{userModel.age}" /> </LinearLayout> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="显示数据" android:onClick="@{userModel.freshUserInfoOnClick}" /> </LinearLayout></layout>
package com.yoyonewbie.mvvm.vm;import android.databinding.Observable;import android.databinding.ObservableBoolean;import android.databinding.ObservableField;import android.databinding.ObservableInt;import android.view.View;public class UserModel { public ObservableField<String> name= new ObservableField<String>(); public ObservableField<String> age=new ObservableField<String>(); public void init() { name.set("未加载") ; age.set("未加载"); } /** * 是刷新用户数据 */ public void freshUserInfo() { name.set("Sam") ; age.set("25"); } /** * 点击刷新用户数据事件 */ public void freshUserInfoOnClick(View view) { freshUserInfo(); }}
package com.yoyonewbie.mvvm.view.activity;import android.databinding.DataBindingUtil;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import com.yoyonewbie.mvvm.vm.UserModel;import com.yoyonewbie.test.R;import com.yoyonewbie.test.databinding.MainActivityBinding;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MainActivityBinding mainActivityBinding = DataBindingUtil.setContentView(this, R.layout.main_activity); UserModel user = new UserModel(); user.init(); mainActivityBinding.setUserModel(user); }}
实现效果:
进入界面预览:
点击后:
0 0
- Android Databinding 从入门到转行(二)添加点击事件
- Android Databinding 从入门到转行(一)初步介绍
- Android Databinding 从入门到转行(四)自定义设置通知刷新回调
- Android Databinding 从入门到转行(三)在xml视图将ViewModel成员注入到View的setXXX方法
- Android Databinding 点击事件
- Android从入门到转行之分享
- Android从入门到转行之登陆
- Android DataBinding(二) 事件绑定
- Android DataBinding (二) 事件处理
- Android RecyclerView使用(二) -给Item添加点击事件
- Git 命令从入门到转行
- Android databinding RecycleView item 子控件点击事件
- DataBinding事件绑定【二】
- intellij idea开发android从入门到精通(二)
- cntk深度网络——从入门到转行一
- android RecyclerView响应点击事件(二)
- android-SwipeMenuListView添加点击事件
- android drawableRight 添加点击事件
- [Headset]如何在ADB shell中读取耳机状态和读取ACCDET寄存器
- 对称加密算法(AES)
- 集合框架一:List接口
- Uiautomator框架(The UI Automator testing framework)简单介绍
- javascript的settimeout
- Android Databinding 从入门到转行(二)添加点击事件
- 2sum,3sum and 和为s的连续正数序列
- 读取android真机里面的文件的方法
- 角色的移动和转身
- 加油!加油!加油!我相信你一定行!
- 源码分析-java-AbstractSequentialList
- Ubuntu 16.04 编译安装 SkyEye 1.3.5
- C++Builder编译链接错误LME288的解决
- OpenCV初级教程