DataBinding 学习系列(1)


 

gradle中开启dataBinding
//核心配置代码在这里,配置在要使用DataBinding的module中
dataBinding{
enabled = true
}

 

public class MainActivity extends BaseActivity {
    /*命名规则是 layot文件名第一个字母大写,后边加上binding,此类是自动生成的*/
    ActivityMainBinding mActivityMainBinding;
    private String TAG="MainActivity";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        Activity_Main_Bean bean = new Activity_Main_Bean();
        mActivityMainBinding.setMainBean(bean);//绑定对象(数据对象)
        mActivityMainBinding.setActivity(this);//绑定对象(函数对象)
    }

    public void clickFirst(View view) {
        ((Button)view).setText("我被点击了 -- clickFirst");
        Log.d(TAG,"clickFirst");
    }
}

  

DataBinding 使用  DataBindingUtil.setContentView(activity,layoutID) 替换 页面 setContentView方法,同时返回一个layoutID对应布局文件名首字母大写的一个对象,此对象是编译器自动生成的

xml文件转换为适合DataBinding使用的xml

 

 

 1,鼠标选中,然后 alt+enter  快捷键

2,直接回车

生成如下的布局文件

 

 

 

 

 

事件绑定

1,空参绑定

#数据绑定
<data>
    <variable
        name="mainBean"
        type="xyz.djytest.mvvm_test.bean.Activity_Main_Bean" />
</data>


#点击事件空参绑定
<Button
    android:id="@+id/button_1"
    android:text="修改text文字"
    android:onClick="@{() -> mainBean.setText()}"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

#xyz.djytest.mvvm_test.bean.Activity_Main_Bean 类中的方法
public void setText() {
    this.text = “空参”;
    notifyPropertyChanged(BR.text);
}

  

2,指定类型参数绑定

 

#数据绑定
<data>
    <variable
        name="mainBean"
        type="xyz.djytest.mvvm_test.bean.Activity_Main_Bean" />
    <variable
        name="input"
        type="java.lang.String" />
    
</data>

#数据双向绑定
<EditText
    android:id="@+id/editText"
    android:layout_width="200px"
    android:layout_height="wrap_content"
    android:text="@={input}" />


#点击事件自定义参数绑定
<Button
    android:id="@+id/button_1"
    android:text="修改text文字"
    android:onClick="@{() -> mainBean.setText(intput)}"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

#xyz.djytest.mvvm_test.bean.Activity_Main_Bean 类中的方法
public void setText(String text) {
    if (text == null || text.trim().length()== 0){
        text = "null";
    }
    this.text = text;
    notifyPropertyChanged(BR.text);
}

  

3,多参绑定

#数据绑定
<data>
    <variable
        name="activity"
        type="xyz.djytest.mvvm_test.activity.MainActivity" />
    <variable
        name="input"
        type="java.lang.String" />
    
</data>

#数据双向绑定
<EditText
    android:id="@+id/editText"
    android:layout_width="200px"
    android:layout_height="wrap_content"
    android:text="@={input}" />


#点击事件多个参数绑定
 <Button
     android:id="@+id/button"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:onClick="@{(view)->activity.paramsClick(view,input)}"
     android:text="@{mainBean.buttonText}" />



mActivityMainBinding.setActivity(this);//绑定view事件

#xyz.djytest.mvvm_test.activity.MainActivity 绑定的方法
public void paramsClick(View view,String input){
        mActivityMainBinding.getMainBean().setText("我是改变后的text");
        mActivityMainBinding.getMainBean().setImgID(R.drawable.vc_logo);
        ((Button)view).setText("我被点击了");

        Log.d(TAG, "EditText 内容为 "+input);
        Log.d(TAG, "改变了text");
    }

  

posted @ 2021-02-26 14:41  凤雏小呆  阅读(130)  评论(0编辑  收藏  举报