zoukankan      html  css  js  c++  java
  • 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");
        }
    

      

  • 相关阅读:
    update inner join
    Centos 7安装docker
    使用Let's Encrypt搭建永久免费的HTTPS服务
    upstream timed out (10060: A connection attempt failed because the connected party did not properly respond
    MySQL死锁分析一例
    solr定时更新索引遇到的问题(SolrDataImportProperties Error loading DataImportScheduler properties java.lang.NullPointerException)
    Java中的关键字 transient
    Spring 4 使用Freemarker模板发送邮件&添加附件
    Spring 4 创建REST API
    Spring 4 异常处理
  • 原文地址:https://www.cnblogs.com/fengchuxiaodai/p/14452247.html
Copyright © 2011-2022 走看看