Android Databinding 从入门到转行(二)添加点击事件

转载请声明: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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值