在User.java中添加一个点击事件,用于setName
转载请注明出处: http://blog.csdn.net/iwanghang/article/details/53216333
在getName前,添加注解@Bindable,告之观察name
在setName中,添加更新通知notifyPropertyChanged(BR.name);
MainActivity.java:
User.java:
CommonAdapter.java:
Utils.java:
activity_main.xml:
item.xml:
转载请注明出处: http://blog.csdn.net/iwanghang/article/details/53216333
转载请注明出处: http://blog.csdn.net/iwanghang/article/details/53216333
在getName前,添加注解@Bindable,告之观察name
在setName中,添加更新通知notifyPropertyChanged(BR.name);
MainActivity.java:
package com.iwanghang.databinding;
import android.databinding.DataBindingUtil;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.iwanghang.databinding.databinding.ActivityMainBinding;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
/**
* 用DataBinding方式载入layout
*/
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
// User user = new User();
// user.setName("用户名");
// user.setNickName("昵称");
// //user.setNickName(null);
// user.setLevel(4);
// user.setEmail("abc@123.com");
// user.setVip(true);
// user.setIcon("http://avatar.csdn.net/6/5/8/1_iwanghang.jpg");
//
// User user1 = new User();
// user1.setName("用户名1");
// user1.setNickName("昵称1");
// user1.setLevel(2);
// user1.setEmail("def@456.com");
// user1.setVip(false);
//
// List<User> users = new ArrayList<>();
// users.add(user);
// users.add(user1);
//
// binding.setUsers(users);
List<User> users = new ArrayList<>();
for (int i = 0; i < 100; i++) {
User user = new User();
user.setName("iwanghang" + i);
user.setIcon("http://avatar.csdn.net/6/5/8/1_iwanghang.jpg");
users.add(user);
}
CommonAdapter<User> adapter =
new CommonAdapter<>(this, users, R.layout.item, com.iwanghang.databinding.BR.user);
binding.setAdapter(adapter);
}
}
User.java:
package com.iwanghang.databinding;
import android.databinding.BaseObservable;
import android.databinding.Bindable;
import android.view.View;
import android.widget.Toast;
/**
* 继承DataBinding的BaseObservable(观察者)
* 用于提醒List刷新
*/
public class User extends BaseObservable {
private String name;
private String nickName;
private String email;
private int level;
private boolean vip;
private String icon;
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public boolean isVip() {
return vip;
}
public void setVip(boolean vip) {
this.vip = vip;
}
/**
* @Bindable 注解 观察name
*/
@Bindable
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
notifyPropertyChanged(BR.name);
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
/**
* 设置点击事件
*/
public void clickName(View view){
Toast.makeText(view.getContext(), "clickName:" + name, Toast.LENGTH_SHORT).show();
}
public boolean longClickName(View view){
Toast.makeText(view.getContext(), "longClickName", Toast.LENGTH_SHORT).show();
return true;
}
public void click(View view){
setName(getName() + "(已点击)");
}
}
CommonAdapter.java:
package com.iwanghang.databinding;
import android.content.Context;
import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import java.util.List;
/**
* 通用的适配器
* 与 数据、布局、控件 无关
* 仅仅作为 连接器 使用
*/
public class CommonAdapter<T> extends BaseAdapter{
private Context context;
private List<T> list;
private int layoutId; // 布局id
private int variableId; // 变量id
public CommonAdapter(Context context, List<T> list, int layoutId, int variableId) {
this.context = context;
this.list = list;
this.layoutId = layoutId;
this.variableId = variableId;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewDataBinding binding = null;
if (view == null) {
binding = DataBindingUtil.inflate(LayoutInflater.from(context), layoutId, viewGroup, false);
} else {
binding = DataBindingUtil.getBinding(view);
}
binding.setVariable(variableId, list.get(i));
return binding.getRoot();
}
}
Utils.java:
package com.iwanghang.databinding;
import android.databinding.BindingAdapter;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
/**
* DataBinding 数据转换类
*/
public class Utils {
// 下载一个图片 设置到ImageView
@BindingAdapter({"imageUrl"})
public static void loadImage(ImageView view, String url){
if (url == null){
view.setImageResource(R.mipmap.ic_launcher);
} else {
// Glide代替Volley
Glide.with(view.getContext()).load(url).into(view);
}
}
}
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<!--改造后的layout-->
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto">
<!--数据模块-->
<data>
<!--只有一个user-->
<!--<variable-->
<!--name="user"-->
<!--type="com.iwanghang.databinding.User"/>-->
<!--使用users-->
<!--<import type="com.iwanghang.databinding.User"/>-->
<!--<variable-->
<!--name="users"-->
<!--type="java.util.List<User>"/>-->
<!--使用ListView-->
<variable
name="adapter"
type="android.widget.BaseAdapter"/>
</data>
<!--样式模块-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:gravity="center"
tools:context="com.iwanghang.databingding.MainActivity">
<!--<include layout="@layout/user_layout"-->
<!--app:user="@{ users[0] }"/>-->
<!--<include layout="@layout/user_layout"-->
<!--app:user="@{ users[1] }"/>-->
<ListView
app:adapter="@{ adapter }"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
</layout>
item.xml:
<?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.iwanghang.databinding.User"/>
</data>
<LinearLayout
android:onClick="@{ user.click }"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
app:imageUrl="@{ user.icon }"
android:layout_width="50dp"
android:layout_height="50dp" />
<TextView
android:text="@{ user.name }"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</LinearLayout>
</layout>
转载请注明出处: http://blog.csdn.net/iwanghang/article/details/53216333
欢迎移动开发爱好者交流
沈阳或周边城市公司有意开发Android,请与我联系
联系方式
微信:iwanghang
QQ:413711276
邮箱:iwanghang@qq.com
沈阳或周边城市公司有意开发Android,请与我联系
联系方式
微信:iwanghang
QQ:413711276
邮箱:iwanghang@qq.com