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();
                    }
        });

         */


    }
}

  

猜你喜欢

转载自www.cnblogs.com/gfwei/p/11779458.html