Android DataBinding数据绑定技术在传统ListView中的使用简例
来源:互联网 发布:java 两个list 去重 编辑:程序博客网 时间:2024/06/07 00:21
Android DataBinding数据绑定技术在传统ListView中的使用简例
本文展示Android DataBinding数据绑定技术在ListView中的使用的简单小例子。简单起见,在Adapter中没有使用ViewHolder技术,目的是为了以最少最简单的代码说明如何在传统ListView中的应用。
本例实行一个简单的功能:ListView中有若干数据条目,当点击任意一条,发生改变,使用Android数据绑定技术实现数据更新,不再使用notifyDataSetChanged()更新View。
建立数据模型User.java:
package zhangphil.test;import android.databinding.BaseObservable;import android.databinding.Bindable;/** * Created by Phil on 2017/9/4. */public class User extends BaseObservable { private int id; private String name; public void setId(int id) { this.id = id; notifyPropertyChanged(BR.id); } @Bindable public int getId() { return id; } public void setName(String name) { this.name = name; notifyPropertyChanged(BR.name); } @Bindable public String getName() { return name; }}
写一个适配器需要的item布局,item.xml:
<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="user" type="zhangphil.test.User" /> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@{String.valueOf(user.id)}" android:textColor="@android:color/holo_blue_light" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@{user.name}" android:textColor="@android:color/holo_red_light" /> </LinearLayout></layout>
测试的MainActivity.java:
package zhangphil.test;import android.app.ListActivity;import android.content.Context;import android.databinding.DataBindingUtil;import android.databinding.ViewDataBinding;import android.os.Bundle;import android.support.annotation.LayoutRes;import android.support.annotation.NonNull;import android.support.annotation.Nullable;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ListView;import java.util.ArrayList;import static zhangphil.test.BR.user;public class MainActivity extends ListActivity { private ArrayList<User> mItems; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //构造若干测试数据源 mItems = new ArrayList(); for (int i = 0; i < 100; i++) { User u = new User(); u.setId(i); u.setName("zhangphil @ " + i); mItems.add(u); } ArrayAdapter mAdapter = new ItemAdapter(this, R.layout.item); setListAdapter(mAdapter); } //每一次点击ListView,id加1,name后面追加系统毫秒时间字符串 //可以看到,这里不再使用Android的notifyDataSetChanged() 即可实时更新View数据 @Override protected void onListItemClick(ListView l, View v, int position, long id) { //取出原来的数据 int Id = mItems.get(position).getId(); String name = mItems.get(position).getName(); //在原来的数据上,id加1。name后面追加点击的时间 mItems.get(position).setId(Id + 1); mItems.get(position).setName(name + System.currentTimeMillis() + "\n"); } private class ItemAdapter extends ArrayAdapter { private Context context; private int resId; public ItemAdapter(@NonNull Context context, @LayoutRes int resource) { super(context, resource); this.context = context; this.resId = resource; } @NonNull @Override public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { //Android数据绑定的关键 ViewDataBinding binding; if (convertView == null) { binding = DataBindingUtil.inflate(LayoutInflater.from(context), resId, parent, false); convertView = binding.getRoot(); convertView.setTag(binding); } else { binding = (ViewDataBinding) convertView.getTag(); } binding.setVariable(user, getItem(position)); return convertView; } @Nullable @Override public User getItem(int position) { return mItems.get(position); } @Override public int getCount() { return mItems.size(); } }}
代码运行结果:
附录:
1,《Android官方DataBinding(三):RecyclerView 使用ViewDataBinding更新数据》链接:http://blog.csdn.net/zhangphil/article/details/77367432
阅读全文
0 0
- Android DataBinding数据绑定技术在传统ListView中的使用简例
- 数据绑定技术-databinding
- android数据绑定框架DataBinding使用
- Android开发-数据绑定-DataBinding-AndroidStudio(五)ListView实现
- Grails中的DataBinding数据绑定
- Android 数据绑定框架DataBinding
- Android数据绑定框架DataBinding
- Android数据绑定框架DataBinding
- Android Databinding数据绑定框架
- Android 数据绑定解耦DataBinding的简单使用
- Android 中DataBinding的使用及数据的绑定
- Android中的数据绑定框架DataBinding(对比AngularJS双向数据绑定很好理解)
- DataBinding绑定Listview
- Android开发-数据绑定-DataBinding-AndroidStudio(一)初识DataBinding
- Android官方数据绑定框架DataBinding(一)
- Android官方数据绑定框架DataBinding(二)
- Android官方数据绑定框架DataBinding
- Android官方数据绑定框架DataBinding(一)
- 百练Integer Inquery
- At least one JAR was scanned for TLDs yet contained no TLDs
- 搜狐笔试题目一袋鼠过河
- Android学习笔记四十二之事件处理机制
- 【文献阅读】Fashion-MNIST: a Novel Image Dataset for Benchmarking Machine Learning Algorithms
- Android DataBinding数据绑定技术在传统ListView中的使用简例
- 常见缓存算法和LRU的C++实现
- c++学习之经典书籍
- webSocket一对一 、一对多通信
- web设计器--设计流程图(raphael)(二)
- 一位资深 架构师大牛给予Java技术提升的学习路线建议
- Selenium怎样驱动Firefox浏览器
- [RK3288][Android6.0] 调试笔记 --- 开机视频无法播放
- 分享一款mac思维导图软件omniGraffle(破解版)