Android开发-数据绑定-DataBinding-AndroidStudio(五)ListView实现

    xiaoxiao2021-11-30  48

    下载一个图片 设置到ImageView 转载请注明出处: http://blog.csdn.net/iwanghang/article/details/53215389 DataBinding的ListView实现 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.view.View; import android.widget.Toast; public class User { 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; } public String getName() { return name; } public void setName(String name) { this.name = 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; } } 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); } } } 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(); } } 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: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> user_layout.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> <variable name="user" type="com.iwanghang.databinding.User"/> </data> <!--样式模块--> <LinearLayout android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center" tools:context="com.iwanghang.databingding.MainActivity"> <ImageView app:imageUrl="@{ user.icon }" android:layout_width="100dp" android:layout_height="100dp" /> <TextView android:onClick="@{ user.clickName }" android:onLongClick="@{ user.longClickName }" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@{ user.vip ? 0xffff0000 : 0xff0000}" android:text="@{ user.nickName + `(` + user.name + `)` }" /> <!--如果nickName为空,显示name;如果如果nickName非空,显示nickName。下面2个写法都可以--> <!--android:text="@{ user.nickName == null ? user.name : user.nickName }"--> <!--android:text="@{ user.nickName ?? user.name }"--> <TextView android:text="@{ user.nickName ?? user.name }" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{ user.email }" /> <!--如果level<3,颜色为00ff00,否则,颜色为0000ff--> <!--@{ user.level < 3 ? 0xff00ff00 : 0xff0000ff }--> <!--@{ user.level < 3 ? 0xff00ff00 : 0xff0000ff }--> <!--需要写成第二行的形式,因为“<”需要转义成“<”--> <TextView android:textColor="@{ user.level < 3 ? 0xff00ff00 : 0xff0000ff }" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="level" /> </LinearLayout> </layout> 转载请注明出处: http://blog.csdn.net/iwanghang/article/details/53215389 欢迎移动开发爱好者交流 沈阳或周边城市公司有意开发Android,请与我联系 联系方式 微信:iwanghang QQ:413711276 邮箱:iwanghang@qq.com
    转载请注明原文地址: https://ju.6miu.com/read-679204.html

    最新回复(0)