返回

Android DataBinding: 从入门到进阶

Android

DataBinding 是谷歌官方发布的一个框架,顾名思义即为数据绑定,是 MVVM 模式在 Android 上的一种实现,用于降低布局和逻辑的耦合性,使代码逻辑更加清晰。

MVVM 相对于 MVP,其最大的优势就是通过数据绑定,让 View 层和 Model 层直接建立联系,中间不再需要 Presenter 层进行转发,这样就极大降低了 Presenter 层的代码量。

DataBinding 的优点

  • 简化了 View 层和 Model 层之间的交互,提高了代码的可读性。
  • 降低了代码量,减少了维护成本。
  • 提高了代码的可重用性。

DataBinding 的使用

  1. 在布局文件中使用 DataBinding
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>
        <variable
            name="user"
            type="com.example.databinding.User" />
    </data>

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{user.name}" />

</layout>
  1. 在 Activity 或 Fragment 中使用 DataBinding
public class MainActivity extends AppCompatActivity {

    private User user;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        user = new User("John", "Doe");
        binding.setUser(user);
    }
}

DataBinding 的进阶使用

  • 使用 Transformations 类转换数据
@InverseBindingAdapter(attribute = "android:text", event = "android:textAttrChanged")
public static String getText(TextView view) {
    return view.getText().toString();
}
  • 使用 ObservableField 监听数据变化
public class User {
    public ObservableField<String> name = new ObservableField<>();
    public ObservableField<String> email = new ObservableField<>();

    // 省略 getter 和 setter 方法
}
  • 使用 DataBindingAdapters 类自定义绑定适配器
@BindingAdapter("android:visibility")
public static void setVisibility(View view, boolean visible) {
    view.setVisibility(visible ? View.VISIBLE : View.GONE);
}

总结

DataBinding 是一个强大的框架,可以极大地简化 Android 开发中的 View 层和 Model 层之间的交互。通过使用 DataBinding,我们可以降低代码量,提高代码的可读性和可重用性。