android DataBinding 绑定数据2-单向数据绑定

model继承BaseObservable,

如果是 public 修饰符,则可以直接在成员变量上方加上 @Bindable
如果是private修饰符,则应该在get方法上方加上 @Bindable

在set方法里的最后加上notifyChange();刷新数据

model代码如下:

package com.example.myapplication10;

import androidx.databinding.BaseObservable;
import androidx.databinding.Bindable;

public class User extends BaseObservable {
    private String name;
    private int age;


    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Bindable
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
        notifyChange();
    }

    @Bindable
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
        notifyChange();
    }


}

如何绑定点击事件?如下:

package com.example.myapplication10;

import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;

import android.os.Bundle;

import com.example.myapplication10.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {

    private User user;
    private GoodsHandler goodsHandler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ActivityMainBinding activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        user = new User("张三",50);
        activityMainBinding.setUser(user);
        activityMainBinding.setGoodsHandler(new GoodsHandler());
    }

    public class GoodsHandler {

        //事件处理函数
        public void changeName() {
            user.setName("哈哈哈");
        }
        
         //事件处理函数
        public void changeAge() {
            user.setAge(33);
        }

    }
}

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable
            name="user"
            type="com.example.myapplication10.User" />
        <variable
            name="goodsHandler"
            type="com.example.myapplication10.MainActivity.GoodsHandler" />
    </data>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">


        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="@{()->goodsHandler.changeName()}"
            android:textSize="25dp"
            android:text="@{user.name}"></TextView>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="@{()->goodsHandler.changeAge()}"
            android:textSize="25dp"
            android:layout_marginTop="50dp"
            android:text="@{String.valueOf(user.age)}">

        </TextView>

    </RelativeLayout>

</layout>

注意,非字符串类型的字段,字段绑定应该转换成字符串,像这样写:

 android:text="@{String.valueOf(user.age)}"
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容