zoukankan      html  css  js  c++  java
  • Android Studio 之 DataBing ,不需要再一个个findViewById了

    使用DataBinding,不需要再一个个findViewById了

    1.在 build.gradel 中 添加下面语句
    dataBinding{
    enabled true
    }


    2.在 activity_main.xml 文件中 点小灯炮,自动生成 data 结点

    3.在 MainActivity.java 中能得到一个新的类, ActivityMainBinding(此类取Activity名称,这个类不是固定的) ActivityMainBinding binding

    4.对 绑定的实例 进行绑定 binding = DataBindingUtil.setContentView(this,R.layout.activity_main);

    5.然后在MainActivity.java 文件中,直接用 binding.控件名,进行访问控件,不需要再像之前一样,一个个定义控件变量了,也不需要一个个控件进行 findViewById() 了

    6.之前的 setContentView(R.layout.activity_main); 这句方法也不需要写了,直接屏蔽掉

    7.在 activity_main.xml 文件中,对控件进行数据回绑
    <data>
    <variable
    name="data"
    type="com.example.databinding.MyViewModel" />
    </data>
    在 <data> 结点中声明 数据变量,
    在 textView 或 其他内容控件中,都可以使用 data 这个变量进行数据绑定
    如:android:text="@{String.valueOf(data.number)}" 直接把 MyViewModel 中的 number 值绑定到控件上
    android:onClick="@{()->data.add()}" 调用 MyViewModel 中的方法

    1. ViewModel 类

    package com.example.databinding;
    
    import androidx.lifecycle.MutableLiveData;
    import androidx.lifecycle.ViewModel;
    
    public class MyViewModel extends ViewModel {
        private MutableLiveData<Integer> number;
        public MutableLiveData<Integer> getNumber(){
            if(number==null)
            {
                number = new MutableLiveData<>();
                number.setValue(0);
            }
            return number;
        }
    
        public void add(){
            number.setValue(number.getValue()+1);
        }
    }
    

      

    2.MainActivity 类

    package com.example.databinding;
    
    import android.os.Bundle;
    import android.widget.Button;
    import android.widget.TextView;
    
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.databinding.DataBindingUtil;
    import androidx.lifecycle.ViewModelProviders;
    
    import com.example.databinding.databinding.ActivityMainBinding;
    
    
    public class MainActivity extends AppCompatActivity {
        TextView textView;
        Button button;
        MyViewModel myViewModel;
        ActivityMainBinding binding;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            /*
            改造步骤:使用DataBinding
            1.在 build.gradel 中 添加下面语句
                      dataBinding{
                        enabled true
                    }
            2.在 activity_main.xml 文件中 点小灯炮,自动生成 data 结点
            3.在 MainActivity.java 中能得到一个新的类, ActivityMainBinding(此类取Activity名称,这个类不是固定的)  ActivityMainBinding binding
            4.对 绑定的实例 进行绑定 binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
            5.然后在MainActivity.java 文件中,直接用 binding.控件名,进行访问控件,不需要再像之前一样,一个个定义控件变量了,
              也不需要一个个控件进行 findViewById() 了
            6.之前的 setContentView(R.layout.activity_main); 这句方法也不需要写了,直接屏蔽掉
            7.在 activity_main.xml 文件中,对控件进行数据回绑
              <data>
                    <variable
                        name="data"
                        type="com.example.databinding.MyViewModel" />
              </data>
              在 <data> 结点中声明 数据变量,
              在 textView 或 其他内容控件中,都可以使用 data 这个变量进行数据绑定
              如:android:text="@{String.valueOf(data.number)}"     直接把 MyViewModel 中的 number 值绑定到控件上
                  android:onClick="@{()->data.add()}"               调用   MyViewModel 中的方法
             */
    
            //setContentView(R.layout.activity_main);
            binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
            /*
            textView = findViewById(R.id.textView);
            button   = findViewById(R.id.button); */
    
            myViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
            binding.setData(myViewModel);     //监听用它来替换了
            binding.setLifecycleOwner(this);  //这句不能少,否则数据不显示
            /*
            myViewModel.getNumber().observe(this, new Observer<Integer>() {
                        @Override
                        public void onChanged(Integer integer) {
                            binding.textView.setText(String.valueOf(integer));
                        }
                    });
    
    
            binding.button.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            myViewModel.add();
                        }
            });
    
             */
    
    
        }
    }
    

      

  • 相关阅读:
    Android基础学习之context
    [原]C语言实现的快速排序,采用分治策略,递归实现
    [原]动态获取应用的视图实际大小
    [原]此程序专用来说明C++模板的用法
    [原]C++程序示例:涉及到抽象类、继承…
    [原]C++关于运算符重载的程序报错error…
    [原]用C#模拟实现扑克牌发牌、排序程序…
    [原]用C#模拟实现扑克牌发牌、排序程序。
    Come on , Android 常用开发工具
    ADB 常用命令
  • 原文地址:https://www.cnblogs.com/gfwei/p/11779458.html
Copyright © 2011-2022 走看看