Android Studio 之 DataBing ,不需要再一个个findViewById了
Posted on 2019-11-01 20:30 孤峰皓月 阅读(1545) 评论(1) 编辑 收藏 举报使用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 类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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 类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | 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(); } }); */ } } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步