Android Databinding簡單使用

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章