自学内容网 自学内容网

ObservableField实现双向绑定

ObservableField是Android Data Binding库中的一个类,用于实现双向绑定。双向绑定意味着当数据模型中的数据发生变化时,UI会自动更新;同时,当用户在UI上进行操作时,数据模型也会相应地更新。

1.在你的项目中添加Data Binding依赖。在build.gradle文件中添加以下代码:

android {
    ...
    dataBinding {
        enabled = true
    }
}

2.创建一个包含ObservableField的ViewModel类

public class UserViewModel {


    private ObservableField<User> userObservableField;

    public UserViewModel(){
        User user = new User("Jack");
        userObservableField = new ObservableField<>(user);
        userObservableField.set(user);
    }

    public String getUserName(){
        Log.d("UserViewModel", "getUserName: "+ Objects.requireNonNull(userObservableField.get()).userName);
        return Objects.requireNonNull(userObservableField.get()).userName;
    }

    public void setUserName(String userName){
        Log.d("UserViewModel", "setUserName: "+userName);
        Objects.requireNonNull(userObservableField.get()).userName = userName;
    }


}

3.在你的布局文件中使用标签包裹你的布局,并使用标签引用ViewModel。例如,创建一个名为activity_main.xml的布局文件:

<?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="userViewModel"
            type="com.zzzjian.databinding5.UserViewModel" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

        <EditText
            android:id="@+id/editText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="text"
            android:text="@={userViewModel.userName}"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />


    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

4.在你的Activity或Fragment中设置ViewModel和布局

public class MainActivity extends AppCompatActivity {

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

原文地址:https://blog.csdn.net/qq_63140630/article/details/142831834

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!