Android开发-数据绑定-DataBinding-AndroidStudio(六)点击监听与数据修改

    xiaoxiao2021-12-03  33

    在User.java中添加一个点击事件,用于setName 转载请注明出处: 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
    转载请注明原文地址: https://ju.6miu.com/read-680009.html

    最新回复(0)