android 学习笔记之data binding
2016-01-18 10:33
489 查看
project build.gradle文件设置
classpath 'com.android.tools.build:gradle:1.3.0' classpath 'com.android.databinding:dataBinder:1.0-rc0'
添加依赖;
Module的build.gradle文件设置
apply plugin: 'com.android.databinding'
添加插件模块;
Java代码
在布局中定义data标签,使用variable对象<layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="user" type="com.qixingbang.myapplication.beans.User"/> </data> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="@{user.getDisplayName()}"/> </RelativeLayout> </layout>
在对应的Activity中添加binding的数据
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityBasicBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_basic); User user = new User("Harry","Potter"); binding.setUser(user); }
至此可以利用databinding在控件上之间显示信息,而不需要获取控件的ID,方便数据控制简化代码,但是增加了布局文件和java代码的耦合,如下图:
那么,使用databinding的一个很好的实际案例就是给ListView之类的控件的itemView填充数据,在上边的基础上,给activity布局增加一ListView,编写ListView每个Item的View的布局如下:
<layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="user" type="com.qixingbang.myapplication.beans.User"/> </data> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="50dp"> <TextView android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:gravity="center" android:text="@{user.getDisplayName()}"/> <TextView android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:gravity="center" android:text="@{String.valueOf(user.getAge())}"/> </LinearLayout> </layout>
Adapter代码如下:
class ListAdapter extends BaseAdapter { private Context mContext; private List<User> mData; public ListAdapter(List<User> list, Context context) { mData = list; mContext = context; } @Override public int getCount() { return mData.size(); } @Override public View getView(int position, View convertView, ViewGroup parent) { // View view = View.inflate(mContext,R.layout.item_userlist,null); ItemUserlistBinding binding; if (null == convertView) { binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.item_userlist, parent, false); convertView = binding.getRoot(); convertView.setTag(binding); } else { binding = (ItemUserlistBinding) convertView.getTag(); } if (null != binding) { binding.setUser(mData.get(position)); } return convertView; } @Override public long getItemId(int position) { return position; } @Override public Object getItem(int position) { return mData.get(position); } }
最基本的Adapter,关键代码在getView方法内,其中ItemUserlistBinding类是由databinding插件自动根据布局xml文件自动生成。
最后给ListVIew的Adapter添加数据即可:
List<User> list = new ArrayList<>(); list.add(new User("lg", "Z", 1)); list.add(new User("yk", "D", 2)); list.add(new User("cy", "L", 3)); list.add(new User("y", "L", 4)); list.add(new User("lg", "Z", 5)); list.add(new User("yk", "D", 6)); list.add(new User("cy", "L", 7)); list.add(new User("y", "L", 8)); list.add(new User("lg", "Z", 9)); list.add(new User("yk", "D", 10)); list.add(new User("cy", "L", 11)); list.add(new User("y", "L", 12)); list.add(new User("lg", "Z", 13)); list.add(new User("yk", "D", 14)); list.add(new User("cy", "L", 15)); list.add(new User("y", "L", 16)); list.add(new User("lg", "Z", 17)); list.add(new User("yk", "D", 18)); list.add(new User("cy", "L", 19)); list.add(new User("y", "L", 20)); listView.setAdapter(new ListAdapter(list, this));
效果如下:
参考博客地址(详细): http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0603/2992.html; http://blog.chengyunfeng.com/?p=734。
相关文章推荐
- Android ImageView 图片拉伸,填满控件
- Android TextView竖直滚动文字广告效果
- Android实现EditText中添加和删除bitmap的方法
- 学习Android Material Design(RecyclerView代替ListView)
- 常用Android开发组件之文本类组件
- Android开发:彻底更改工程名
- 基础篇_浅谈Android 布局
- android 基础(一):activity启动方式standard、singleTop、singleTaste、singleInstance
- Android实现圆形图片
- adb、sqlite3操作android数据库
- Android项目实战之仿网易新闻的页面(RecyclerView )
- Android实现内存中数据保存到sdcard的方法
- 修改apk的包名
- Android 开发绕不过的坑:你的 Bitmap 究竟占多大内存?
- Android开发之禁止下拉通知栏的方法
- Android M 新的运行时权限开发者需要知道的一切
- 提高android数据库性能,GreenDao初步使用
- Android仿搜狗浏览器加载动画
- 专访罗升阳:老罗的Android之旅
- Android Design Support Library——Navigation View