Android Databinding简单使用

来源:互联网 发布:mac 必应词典下载 编辑:程序博客网 时间:2024/06/05 11:23

2015年谷歌I/O大会上介绍了一个非常厉害的新框架DataBinding,数据绑定框架,谷歌官方原生支持MVVM模型,给我们带来了很大的方便,以前我们可能需要在每个Activity里写很多的findViewById,不仅麻烦,还增加了代码的耦合性,如果我们使用DataBinding,就可以抛弃那么多的findViewById,省时省力。

1.在gradle中配置

在Android 节点下添加

dataBinding {    enabled = true;}

2.创建一个简单bean类

3.listview 的item xml文件设置

lv_item.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

<data>
<import type=".....User"  alias="myUser"/><! - -import  type = bean 类的全类名    alisas 属性:当导入的类重名时起的别称用来区分相同类- ->
<variable
name="user"
type="myUser"/>
</data>

<RelativeLayout
android:padding="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<ImageView
android:id="@+id/iv_icon"
android:layout_marginRight="30dp"
android:src="@drawable/icon"
android:layout_width="50dp"
android:layout_height="50dp"/>

<TextView
android:id="@+id/tv_name"
android:text="@{usermy.name}"
android:textSize="18sp"
android:layout_toRightOf="@id/iv_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

<TextView
android:id="@+id/tv_age"
android:text="@{usermy.age}"
android:textSize="18sp"
android:layout_below="@id/tv_name"
android:layout_toRightOf="@id/iv_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

</RelativeLayout>
</layout>


4.java文件中设置

import android.app.Activity;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;

import .....LvItemBinding;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class MainActivity extends Activity {

private ListView lv;
String[] names = {"周杰伦","林俊杰","陶喆","王力宏"};
String[] ages = {"28","29","30","31"};
List<User> list = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

lv = ((ListView) findViewById(R.id.main_lv));
MyAdapter adapter = new MyAdapter();

loadingData();
lv.setAdapter(adapter);
}

private void loadingData() {
Random random = new Random();
for (int i = 0; i < 30; i++) {
User user = new User(names[random.nextInt(4)], ages[random.nextInt(4)]);
list.add(user);
}
}

private class MyAdapter extends BaseAdapter {

private LvItemBinding binding;

public MyAdapter() {
}

@Override
public int getCount() {
return list == null ? 0 : list.size();
}

@Override
public Object getItem(int position) {
return null;
}

@Override
public long getItemId(int position) {
return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
Holder holder = null;

if (convertView == null) {
binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.lv_item, parent, false);
holder = new Holder();
holder.setItemBinding(binding);
convertView = binding.getRoot();
convertView.setTag(holder);
}else {

holder = (Holder) convertView.getTag();
binding = holder.getItemBinding();
}

binding.setUsermy(list.get(position));

return convertView;
}
}


static class Holder {

private LvItemBinding itemBinding;

public LvItemBinding getItemBinding() {
return itemBinding;
}

public void setItemBinding(LvItemBinding itemBinding) {
this.itemBinding = itemBinding;
}
}
}

可见dataBinding用法还是比较简单的

另外还有一些高级的用法可见 http://www.jianshu.com/p/2d3227d9707d

原创粉丝点击