您当前的位置: 首页 > 

梁同学与Android

暂无认证

  • 8浏览

    0关注

    618博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Andriod --- JetPack :BaseObservable 与 ObservableField 双向绑定

梁同学与Android 发布时间:2022-03-28 17:32:50 ,浏览量:8

Andriod — JetPack :初识 JetPack

Andriod — JetPack :LifeCycle 的诞生

Andriod — JetPack :ViewModel 的诞生

Andriod — JetPack :BaseObservable 与 ObservableField 双向绑定

Andriod — JetPack :DataBinding + LiveData +ViewModel 简单实例

Andriod — JetPack :Room 增删改查

Andriod — JetPack :Room + ViewModel + LiveData 增删改查实例

Andriod — JetPack :LiveData setValue 和 postValue 的区别

一、什么叫单向绑定与双向绑定

单向绑定:对象变化的时候 TextView 自动更新 双向绑定:对象变化的时候 EditView 自动更新。EditText 变化的时候对象的值也发生变化。 在这里插入图片描述

二、BaseObservable 双向绑定代码实例

build.gradle

android {
    compileSdkVersion 29
    buildToolsVersion "30.0.3"
    dataBinding {
        enabled = true
    }
}

MainActivity.java

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

import android.os.Bundle;

import com.example.baseobservable.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityMainBinding activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        activityMainBinding.setUserViewModel(new UserViewModel());
    }
}

activity_main.xml




    
        
    

    

        

    

User.java

package com.example.baseobservable;

public class User {
    public String userName;

    public User(String userName) {
        this.userName = userName;
    }
}

UserViewModel.java

package com.example.baseobservable;

import android.util.Log;

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

// 并不是真正的 ViewModel
public class UserViewModel extends BaseObservable {
    private User user;

    public UserViewModel() {
        this.user = new User("Jack");
    }

    /*
     * 用 Bindable 进行绑定
     * 只要对象发生变化 EditText 就会发生变化
     */
    @Bindable
    public String getUserName() {
        return user.userName;
    }

    // EditText 中的内容发生变化就会调用 setUserName
    public void setUserName(String userName) {
        if(userName != null && !userName.equals(user.userName)) {
            user.userName = userName;
            Log.d("liang", userName);
            notifyPropertyChanged(BR.userName); // 通知属性发生变化 , build 之后自动生成
        }
    }
}

结果: 在这里插入图片描述

三、ObservableField 双向绑定代码实例

需要修改的文件: UserViewModel.java

package com.example.baseobservable;

import android.util.Log;

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

// 并不是真正的 ViewModel
public class UserViewModel {
    private ObservableField userObservableField;

    public UserViewModel() {
        User user = new User("Jack");
        userObservableField = new ObservableField();
        userObservableField.set(user); // userObservableField 与 user 关联起来
    }

    public String getUserName() {
        return userObservableField.get().userName;
    }
    public void setUserName(String userName) {
        Log.d("liang", userName);
        userObservableField.get().userName = userName;
    }

}
关注
打赏
1660730345
查看更多评论
立即登录/注册

微信扫码登录

0.0395s