您的位置:首页 > 其它

数据绑定技术DataBinding

2018-01-09 13:37 465 查看

数据绑定技术使用一

第一步添加配置

项目下的build.gradle下的android中defaultConfig下方添加代码:
dataBinding{
enabled true
}

第二步添加数据常量并设置set和get方法,因为偷懒就不写了

public class User {
private String name;
private String nickName;
private String email;
private boolean vip;

/**
* 点击用户名
*/
public void clickName(View view){
Toast.makeText(view.getContext(),"点击了用户名",Toast.LENGTH_LONG).show();
}
/**
* 长按昵称
*/
public boolean longClickName(View view){
Toast.makeText(view.getContext(),"长按了昵称",Toast.LENGTH_LONG).show();
return true;
}
}

第三步布局:type是自己定义常量的位置

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

<data>

<variable
name="user"
type="com.hbwj.myapplication.User" />
</data>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<!--是否是会员,是文字颜色为红色,不是文字颜色为黑色-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="@{user.clickName }"
android:text="@{user.nickName+'('+user.name+')'}"
android:textColor="@{user.vip?0xffff0000:0xff000000}" />
<!--user.nickName??user.name==user.nickName==null?user.name:user.nickName-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onLongClick="@{user.longClickName}"
android:text="@{user.nickName??user.name}" />
<!--不用用<或者>运算符,用<代替<;用>代替>-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.email}"
android:textColor="@{user.level < 3 ?0xffff0000:0xff000000}" />

</LinearLayout>

</layout>

第四步:activity下的使用

//setContentView(R.layout.activity_main);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
User user=new User();
user.setName("用户名");
user.setNickName("昵称");
user.setEmail("1024@qq.com");
user.setLevel(5);
user.setVip(true);
binding.setUser(user);

数据绑定技术二

第一步:将之前的activitymain布局复制到userlayout中并且修改代码

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

<data>

<variable
name="user"
type="com.hbwj.myapplication.User" />
</data>

<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<!--是否是会员,是文字颜色为红色,不是文字颜色为黑色-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="@{user.clickName }"
android:text="@{user.nickName+'('+user.name+')'}"
android:textColor="@{user.vip?0xffff0000:0xff000000}" />
<!--user.nickName??user.name==user.nickName==null?user.name:user.nickName-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onLongClick="@{user.longClickName}"
android:text="@{user.nickName??user.name}" />
<!--不用用<或者>运算符,用<代替<;用>代替>-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.email}"
android:textColor="@{user.level < 3 ?0xffff0000:0xff000000}" />

</LinearLayout>

</layout>

修改activity_main:

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

<data>

<variable
name="user"
type="com.hbwj.myapplication.User" />
</data>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="horizontal">

<include layout="@layout/user_layout"
app:user="@{user}"/>

<include layout="@layout/user_layout"
app:user="@{user}"/>

</LinearLayout>

</layout>

第二步:MainActivity中新增一个User对象

ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
users = new ArrayList<>();
User user = new User();
user.setName("用户名");
user.setNickName("昵称");
user.setEmail("1024@qq.com");
user.setLevel(5);
user.setVip(true);
User user1 = new User();
user1.setName("用户名2");
user1.setNickName("昵称2");
user1.setEmail("1028@qq.com");
user1.setLevel(2);
user1.setVip(false);
users.add(user);
users.add(user1);
binding.setUsers(users);

第三步:修改主布局

<?xml version="1.0" encoding="utf-8"?>
&
f31f
lt;layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="com.hbwj.myapplication.User" />
<!--java.util.List<User>==List<User>-->
<variable
name="users"
type="java.util.List<User>" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="horizontal">
<include
layout="@layout/user_layout"
app:user="@{users[0]}" />

<include
layout="@layout/user_layout"
app:user="@{users[1]}" />
</LinearLayout>
</layout>

第四步:修改User中的点击事件

/**
* 点击用户名
*/
public void clickName(View view){
Toast.makeText(view.getContext(),"点击了:"+name,Toast.LENGTH_LONG).show();
}

/**
* 长按昵称
*/
public boolean longClickName(View view){
Toast.makeText(view.getContext(),"长按了:"+nickName,Toast.LENGTH_LONG).show();
return true;
}






数据绑定技术加载图片

首先布局user_layout中添加ImageView控件

<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
app:imageUrl="@{user.icon}"/>

自定义一个工具类加载图片

/**
* 加载图片
*/
@BindingAdapter({"imageUrl"})//随便起,但要保证布局中设置的和它一样
public static void loadImageView(ImageView imageView,String url){
if(url==null){
imageView.setImageResource(R.drawable.ic_launcher);
}else {
Glide.with(imageView.getContext()).load(url).into(imageView);
}
}

设置图片的url,图片自己去网上找,风骚的,性感的,可爱的你想咋整你随意

user.setIcon("http://p0.so.qhimgs1.com/bdr/_240_/t019aa0ed00b08bc6ec.jpg");




数据绑定技术之listview的使用

首先第一步新建一个通用adapter

public class CommonAdapter<T> extends BaseAdapter {
private Context context;
private List<T> list;
private int layoutId;//布局的id
private int veriableId;//databinding的变量id

public CommonAdapter(Context context, List<T> list, int layoutId, int veriableId) {
this.context = context;
this.list = list;
this.layoutId = layoutId;
this.veriableId = veriableId;
}

@Override
public int getCount() {
return list.size();
}

@Override
public Object getItem(int position) {
return list.get(position);
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewDataBinding binding;
if (convertView == null) {
binding = DataBindingUtil.inflate(LayoutInflater.from(context), layoutId, parent, false);
} else {
binding = DataBindingUtil.getBinding(convertView);
}
binding.setVariable(veriableId, list.get(position));
return binding.getRoot();
}
}

第二步:主布局

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

<data>

<variable
name="adapter"
type="android.widget.BaseAdapter" />
</data>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="horizontal">

<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:adapter="@{adapter}">

</ListView>

</LinearLayout>

</layout>

第三步:每个item的布局,本人比较懒,所以还是用之前的User:

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

<data>

<variable
name="user"
type="com.hbwj.myapplication.User" />
</data>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">

<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
app:imageUrl="@{user.icon}" />

<TextView
android:id="@+id/textView"
android:layout_width="match_parent"

android:layout_height="100dp"
android:text="@{user.name}" />
</LinearLayout>
</layout>

最后一步就是使用了

ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
users = new ArrayList<>();
for (int i = 0; i < 100; i++) {
User user = new User();
user.setIcon("https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2367757340,3418517196&fm=27&gp=0.jpg");
user.setName("user" + i);
users.add(user);
}
//databinding会自动生成一个BR
CommonAdapter<User> adapter = new CommonAdapter<>(MainActivity.this, users, R.layout.item, BR.user);
binding.setAdapter(adapter);


图片你自己可以上网搜,一大片,什么类型的都有,绝对足够符合你的口味。

给listview添加点击事件并且刷新数据

首先在User类中添加点击事件

public void onClick(View view) {
setName(getName() + "(已点击)");
}

item的布局中添加点击事件,图片、文字或者两者添加以下代码:

android:onClick="@{user.onClick}"

立即刷新数据

1.让user类继承与BaseObservable

2.getName方法中添加@Bindable注解 @Bindable public String getName() { return name; }

3.setName方法中刷新数据 public void setName(String name) { this.name = name; notifyPropertyChanged(BR.name); }

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: