databinding 与自定义类联合,动态改变 view 可见性

  1. /app 下的 build.gradle 中,在android 里开启 databinding,如下所示:
android {
    ...
    dataBinding {
        enabled = true
    }
}
  1. 自定义类 ViewModel,如下所示:
public class ViewModel extends BaseObservable {

    private int visibility = View.VISIBLE;

    @Bindable
    public int getVisibility() {
        Log.e("ViewModel", "Visibility=" + visibility);
        return visibility;
    }

    public void setVisibility(int visibility) {
        Log.e("ViewModel", "visibility_set = "+ visibility);
        this.visibility = visibility;
        notifyPropertyChanged(BR.visibility);
    }
}

说明

  • 自定义类一定要继承 BaseObservable
  • @Bindable 一定要绑定到 getter 上
  • notifyPropertyChanged(BR.xx) 一定要放在 setter 中
  1. 将自定义类与布局文件 activity_main.xml 绑定
<layout>
    <data>
        <variable
            name="viewModel"
            type="xxx.xxxx.ViewModel" />
    </data>
    <RelativeLayout>
        <View
            android:visibility="@{viewModel.visibility}" />
    </RelativeLayout>
</layout>

说明:

  • <layout> 标签与 <RelativeLayout> 标签中可以填入一般布局中的属性
  • type 属性一定要填写自定义类的完整路径
  1. 在 Activity 中进行绑定与刷新
// 1. 绑定
ActivityMainBinding binding = 
    DataBindgUtil.setContentView(this, R.layout.activity_main);
ViewModel viewModel = new ViewModel();
binding.setViewModel(viewModel);

说明:

  • 在布局文件中引入 DataBinding 之后,会自动生成 Binding 类
// 2. 刷新
viewModel.setVisibility(viewModel.getVisibility() 
            == View.VISIBLE ? View.GONE : View.VISIBLE);
    原文作者:锦岳
    原文地址: https://www.jianshu.com/p/fff5110993df
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞