http://blog.youkuaiyun.com/u012702547/article/details/52077515
以下代码拷贝出来可直接运行看效果:Demo1和Demo2的效果写在一起了。。。。。
1.activity_main.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.haiyangyin.mytest.been.UserEntity"/>
</data>
<LinearLayout
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.haiyangyin.mytest.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.username}"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.nickname}"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{`username is:`+user.username}"/><!--字符串拼接-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{String.valueOf(user.age)}"/><!--int类型转换-->
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:userface="@{user.userface}"/>
</LinearLayout>
</layout>
2.UserEntity实体类:
package com.haiyangyin.mytest.been; import android.databinding.BindingAdapter; import android.widget.ImageView; import com.squareup.picasso.Picasso; /** * Created by YinHaiYang on 2017/2/21. */ public class UserEntity { private String username; private String nickname; private String userface; private int age; public UserEntity() { } public UserEntity(int age, String nickname, String username) { this.age = age; this.nickname = nickname; this.username = username; } public UserEntity(String userface, String nickname) { this.nickname = nickname; this.userface = userface; } @BindingAdapter("bind:userface") public static void getInternetImage(ImageView iv, String userface) { Picasso.with(iv.getContext()).load(userface).into(iv); } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getUserface() { return userface; } public void setUserface(String userface) { this.userface = userface; } }
3.MainActivity类:
package com.haiyangyin.mytest; import android.databinding.DataBindingUtil; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.ListView; import com.haiyangyin.mytest.been.UserEntity; import com.haiyangyin.mytest.databinding.ActivityMainBinding; public class MainActivity extends AppCompatActivity { private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityMainBinding activityMainBinding= DataBindingUtil.setContentView(this, R.layout.activity_main); // activityMainBinding.setUser(new UserEntity(34,"zhangsan","张三")); activityMainBinding.setUser(new UserEntity("http://img2.cache.netease.com/auto/2016/7/28/201607282215432cd8a.jpg","lisi")); } }
注意:访问图片的时候AndroidManifest中加网路权限<uses-permission android:name="android.permission.INTERNET" />
Demo3:
acvitivty_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.haiyangyin.mytest.MainActivity">
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
listview_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="food"
type="com.haiyangyin.mytest.been.Food" />
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="96dp">
<ImageView
android:id="@+id/iv"
android:layout_width="96dp"
android:layout_height="96dp"
android:padding="6dp"
app:img="@{food.img}" />
<TextView
android:id="@+id/description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_toRightOf="@id/iv"
android:ellipsize="end"
android:maxLines="3"
android:text="@{food.description}" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="2dp"
android:layout_marginLeft="8dp"
android:layout_toRightOf="@id/iv"
android:text="@{food.keywords}"
android:textStyle="bold" />
</RelativeLayout>
</layout>
Food.java
package com.haiyangyin.mytest.been;
import android.databinding.BindingAdapter;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import com.squareup.picasso.Picasso;
/**
* Created by YinHaiYang on 2017/2/20.
*/
public class Food {
private String description;
private String img;
private String keywords;
private String summary;
private Food(){
}
public Food(String description, String img, String keywords, String summary) {
this.description = description;
this.img = img;
this.keywords = keywords;
this.summary = summary;
}
@BindingAdapter("bind:img")
public static void loadInternetImage(ImageView iv,String img){
Picasso.with(iv.getContext()).load(img).into(iv);
}
public void onItemClick(View view){
Toast.makeText(view.getContext(),getDescription(),Toast.LENGTH_SHORT).show();
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getImg() {
return img;
}
public void setImg(String img) {
this.img = img;
}
public String getKeywords() {
return keywords;
}
public void setKeywords(String keywords) {
this.keywords = keywords;
}
public String getSummary() {
return summary;
}
public void setSummary(String summary) {
this.summary = summary;
}
}
FoodAdapter.java
package com.haiyangyin.mytest;
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;
/**
* Created by YinHaiYang on 2017/2/20.
*/
public class FoodAdapter<T> extends BaseAdapter {
private Context context;
private LayoutInflater inflater;
private int layoutId;//layoutId这个表示item布局的资源id
private int variableId;//variableId是系统自动生成的,根据我们的实体类,直接从外部传入即可
private List<T> lists;
public FoodAdapter(Context context, int layoutId, int resId, List<T> lists) {
this.context = context;
this.layoutId = layoutId;
this.lists = lists;
this.variableId = resId;
inflater=LayoutInflater.from(context);
}
@Override
public int getCount() {
return lists.size() > 0 ? lists.size() : 0;
}
@Override
public Object getItem(int position) {
return lists.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewDataBinding dataBinding;
if (convertView == null) {
dataBinding = DataBindingUtil.inflate(inflater, layoutId, parent, false);
} else {
dataBinding = DataBindingUtil.getBinding(convertView);
}
dataBinding.setVariable(variableId, lists.get(position));
return dataBinding.getRoot();
}
}
MainActivity.java
package com.haiyangyin.mytest;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import com.haiyangyin.mytest.been.Food;
import com.squareup.okhttp.Callback;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
FoodAdapter<Food> adapter = new FoodAdapter<>(MainActivity.this, R.layout.listview_item, com.haiyangyin.mytest.BR.food, foods);
lv.setAdapter(adapter);
}
};
private List<Food> foods;
private ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = ((ListView) findViewById(R.id.listview));
initData();
}
private void initData() {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url("http://www.tngou.net/api/food/list?id=1").build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
if (response.isSuccessful()) {
parseJson(response.body().string());
}
}
});
}
private void parseJson(String jsonStr) {
foods = new ArrayList<>();
try {
JSONObject jo = new JSONObject(jsonStr);
JSONArray tngou = jo.getJSONArray("tngou");
for (int i = 0; i < tngou.length(); i++) {
JSONObject item = tngou.getJSONObject(i);
String description = item.getString("description");
String img = "http://tnfs.tngou.net/image" + item.getString("img");
String keywords = "【关键词】 " + item.getString("keywords");
String summary = item.getString("summary");
foods.add(new Food(description, img, keywords, summary));
}
mHandler.sendEmptyMessage(0);
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
foods.get(position).onItemClick(view);
}
}
运行结果:
注:运行时会报以下错误,但这并不会影响运行结果不必担心!!!!!!!!!!!!!想去掉警告可以参考:http://blog.youkuaiyun.com/jeromeyang09/article/details/52622963