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
原创粉丝点击