安卓日记——再也不用findViewById了(DataBinding快速入门)
来源:互联网 发布:会计网络培训 编辑:程序博客网 时间:2024/06/06 21:37
DataBinding是谷歌一个数据绑定框架,谷歌出品,必属佳品
他的主要思想是mvvm,但这里不是重点,重点如何简单的使用这个好用的框架
1.设置使用dataBindind
要求你的gradule版本>=1.5
这里甚至不用下载包,只要加几行配置就好了
在app的build.gradule=>android下添加
dataBinding { enabled = true }
2.写主布局
<layout xmlns:android="http://schemas.android.com/apk/res/android"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/btn" android:text="button"/> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/rw"></android.support.v7.widget.RecyclerView> </LinearLayout></layout>
就是这么简单,在外面加一个layout标签就好了
控件的id也要设好
3.写主布局的逻辑代码
public class MainActivity extends AppCompatActivity { private List<Student> data=new ArrayList<Student>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initVariable(); //binding的名字随便起,写完这一行后会提示你导入的 ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); LinearLayoutManager manager=new LinearLayoutManager(this); //binding后加的就是控件的id binding.rw.setLayoutManager(manager); binding.rw.setAdapter(new RecAdapter(data,this)); binding.btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this,"click",Toast.LENGTH_SHORT).show(); } }); } private void initVariable() { for (int i=0;i<10;i++){ Student student=new Student("jack"+i,"GZ"+i); data.add(student); } }}
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);是重点
binding后加上控件的id然后接下来就和平常的控件用法一样了
不过RecyclerView比较特别,接下来详细介绍一下他的用法
4.写数据的实体
public class Student { private String name; private String addr; public Student() { } public Student(String name, String addr) { this.name = name; this.addr = addr; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddr() { return this.addr; } public void setAddr(String addr) { this.addr = addr; }}
5.写item的布局
<layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="stu" type="com.jkgeekjack.usedatabinding.Student" /> </data> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{stu.name}" android:layout_alignParentLeft="true"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{stu.addr}" android:layout_alignParentRight="true"/> </RelativeLayout></layout>
看到这里会发现和我们平时用的有很大不同,这就是VM,这里不深究
首先声明你要放置的数据类型并起个名字,类型要加上包名
然后什么地方放这个实体的什么属性都设置好,到时传入一个实例就会自动把属性放到相应的位置
6.写RecyclerView的Adapter
public class RecAdapter extends RecyclerView.Adapter<RecAdapter.ViewHolder> { List<Student> data=new ArrayList<Student>(); Context context; public RecAdapter(List<Student>data,Context context){ this.data=data; this.context=context; } @Override public RecAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //在Adapter里的用法不同于Activity,不能用setContenView ViewDataBinding binding=DataBindingUtil.inflate(LayoutInflater.from(context),R.layout.item_user,parent,false); //binding.getRoot()就是获取binding的view ViewHolder viewHolder=new ViewHolder(binding.getRoot()); //让viewholder和binding绑定起来 viewHolder.setBinding(binding); return viewHolder; } @Override public void onBindViewHolder(RecAdapter.ViewHolder holder, final int position) { //包名+.BR+.name,接下来传入数据 holder.getBinding().setVariable(com.jkgeekjack.usedatabinding.BR.stu,data.get(position)); //设置item的监听 holder.getBinding().getRoot().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context,data.get(position).getAddr(),Toast.LENGTH_LONG).show(); } }); } @Override public int getItemCount() { return data.size(); } class ViewHolder extends RecyclerView.ViewHolder{ ViewDataBinding binding; public ViewHolder(View itemView) { super(itemView); } public void setBinding(ViewDataBinding binding) { this.binding = binding; } public ViewDataBinding getBinding() { return binding; } }}
以前的ViewHolder都是装控件的,现在变成了装ViewDataBinding的
因为已经设好数据的摆放位置,就直接用setVariable传数据进去就好了
这样基本的方法就搞好了
最后还有个彩蛋
DataBinding还有个强大的地方
可以直接传入一个实例,像adapter里那样,不过在Activity里面会更加简单,不用写name
不过传入的方法有点不同
主布局改为
<layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="stu" type="org.loader.androiddatabinding.Student" /> </data> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{stu.name}"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{stu.addr}"/> </LinearLayout> </layout>
然后主布局的逻辑代码适这样的
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); binding.setStu(new Student("jack", "GZ")); } }
setStu是自动生成的,你输入bingind.set会提示你布局里你个实例的名字以大写开头,然后就直接传入数据就好了
DataBinding是不是好强大呢,果然是谷歌的亲儿子啊!
- 安卓日记——再也不用findViewById了(DataBinding快速入门)
- DataBinding 再也不用写findviewbyId了
- DataBinding快速入门(还在用findViewById?)
- DataBinding快速入门(还在用findViewById?)
- DataBinding快速入门(还在用findViewById?)
- DataBinding快速入门(还在用findViewById?)
- 使用dataBinding,真正不用findViewById
- lombok快速入门:实体类中再也不用写setter和getter,toString等方法了
- ButterKnife的使用,再也不用写findviewById
- 再也不用CSDN了!!!!!!
- android:kotlin语言开发再也不用findViewById与ButterKnife
- 安卓日记——Realm快速上手
- 商场优惠活动——妈妈再也不用担心这类题我不会了!
- DataBinding快速入门
- EventBus 入门+新写法 再也不用写xxxEvent了和这么多Event类了
- 用c++快速创建多个文件夹!妈妈再也不用担心我的手指了!!!
- android 使用泛型再也不写findViewById方法了
- 下次再也不用清理注册表工具了
- 第4问
- svn
- Spring Security(09)——Filter
- 关于Android studio使用极光推送
- Spring Security(10)——退出登录logout
- 安卓日记——再也不用findViewById了(DataBinding快速入门)
- SQL分页查询总结
- 文章标题
- Spring Security(11)——匿名认证
- nyoi 833取石子(七)
- LeetCode - 268. Missing Number
- Spring Security(12)——Remember-Me功能
- github atom编辑器推介 - 足以替代 sublime
- 切图崽的自我修养-如何合理组织CSS