Android-- ArrayAdapter用法举例(转载)
近期很多Android开发者来函表示对ArrayAdapter和BaseAdapter的区别不是很清楚,这里Android123简单说下他们的关系和用处,ArrayAdapter是从BaseAdapter派生出来的,具备BaseAdapter的所有功能,但ArrayAdapter更为强大,它实例化时可以直接使用泛型构造,我们在Android SDK中可以看到android.widget.ArrayAdapter<T>的字样,当然也可以使用 ArrayAdapter(Context context, int textViewResourceId) 第二个参数直接绑定一个layout,下文的例子我们使用Java泛型实例化。
通过Adapter我们构造一个支持icon的item,下面我们在getView中使用的是imageView显示图片,当然android123提示大家其实TextView也可以直接绑定一个drawable对象显示的,void setCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom) 或void setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom) 和void setCompoundDrawablesWithIntrinsicBounds(Drawable left, Drawable top, Drawable right, Drawable bottom) 即可,其中第二种的int类型指定的资源id,方位则是textview什么位置显示drawable对象
说了这么多ArrayAdapater一起看个例子,来实例化ArrayAdapter吧,我们可以修改Res/layout/icon_list_item.xml文件来实现自定义显示效果。
- public class IconListAdapter extends ArrayAdapter<IconListAdapter.IconListItem> {
- protected LayoutInflater mInflater;
- private static final int mResource = R.layout.icon_list_item; //xml布局文件
- public IconListAdapter(Context context,
- List<IconListItem> items) {
- super(context, mResource, items);
- mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- TextView text;
- ImageView image;
- View view;
- if (convertView == null) {
- view = mInflater.inflate(mResource, parent, false);
- } else {
- view = convertView;
- }
- text = (TextView) view.findViewById(R.id.text1);
- text.setText(getItem(position).getTitle());
- image = (ImageView) view.findViewById(R.id.icon); //可以使用上文说的三种方法,直接用TextView类的setCompoundDrawables等方法绑定图标显示
- image.setImageResource(getItem(position).getResource());
- return view;
- }
- public static class IconListItem { //每条显示的构造方法
- private final String mTitle;
- private final int mResource;
- public IconListItem(String title, int resource) {
- mResource = resource;
- mTitle = title;
- }
- public String getTitle() {
- return mTitle;
- }
- public int getResource() {
- return mResource;
- }
- }
- }
当然对于ArrayAdapter到底比BaseAdapter先进到哪里呢? 从名称来看Array我们可以联系到数组的很多操作,没错Android123给大家列出本类所有成员方法实用的处理方式,比如:
- void add(T object) //添加一个对象到本ArrayAdapter
- void clear() //清除所有元素
- static ArrayAdapter<CharSequence> createFromResource(Context context, int textArrayResId, int textViewResId) //从layout资源构造arrayadapter
- Context getContext() //获取实例
- int getCount()
- View getDropDownView(int position, View convertView, ViewGroup parent) //获取drop down的popup风格选择条目的内容,参数1是位置,参数2可以通过强制转换直接获取本条的内容
- Filter getFilter() //使用正则过滤数据
- T getItem(int position) //获取单条内容
- long getItemId(int position)
- int getPosition(T item) //通过内容获取是某条
- View getView(int position, View convertView, ViewGroup parent)
- void insert(T object, int index) //插入新条目到数组的index位置
- void notifyDataSetChanged() //通知数据变化了,告诉绑定Adapter的widget来更新UI
- void remove(T object) //移出一条从数组,这里并没有指定位置
- void setDropDownViewResource(int resource) //设置dropdown的layout风格
- Sets the layout resource to create the drop down views.
- void setNotifyOnChange(boolean notifyOnChange) //本条是arrayadapter最强大的功能,android123强烈推荐处理大数据时使用该方法,可以降低ui的处理量,刷新ui可以更快速,主要可以停止对
- (add(T), insert(T, int), remove(T), clear() 的操作,当然可以通过 notifyDataSetChanged(). 或 setNotifyOnChange(true) 通知变化
- void sort(Comparator<? super T> comparator) //这里是android开发网经常用的排序,使用arrayadapter可以直接排序,十分方便
所以最终android123推荐大家什么情况使用arrayadapter,什么时候使用baseadapter。当数量较多,比如超过100条或频繁动态增减时使用arrayadapter可以方便控制ui,通过setNotifyOnChanage方法,如果比较简单仅仅呈现直接从 baseadapter更节省资源。
Android-- ArrayAdapter用法举例(转载)的更多相关文章
- Android ScrollView用法
Android ScrollView用法 今天试着使用了一下Android的滚轮,以下是一个小小的测试,读取测试文件,主要是使用scrollTo函数和getScrollY(),程序点击BUTTON按钮 ...
- 12. nc/netcat 用法举例
nc命令用法举例 什么是nc nc是netcat的简写,有着网络界的瑞士军刀美誉.因为它短小精悍.功能实用,被设计为一个简单.可靠的网络工具 nc的作用 (1)实现任意TCP/UDP端口的侦听,nc可 ...
- c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例
c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. 1 ...
- Android Meun 用法
Android Meun 用法 点击菜单实体键弹出菜单:如下图 main_activity.xml <?xml version="1.0" encoding="ut ...
- Android ViewPager 用法
Android ViewPager 用法 场景:一般第一次打开应用程序时,程序会有一个提示页来给展现应用程序都有哪些功能:或者程序更新时,又更新哪些新特性,都可以使用ViewPager Demo 描述 ...
- Android Intent 用法全面总结
[代码全屏查看]-Android Intent 用法全面总结 // [1].[代码] 调用拨号程序 跳至 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] / ...
- Android GLSurfaceView用法详解(二)
输入如何处理 若是开发一个交互型的应用(如游戏),通常需要子类化 GLSurfaceView,由此可以获取输入事件.下面有个例子: java代码: package eoe.ClearTes ...
- 【转】awk 里的substr函数用法举例
awk 里的substr函数用法举例: 要截取的内容:2007-08-04 04:45:03.084 - SuccessfulTradeResult(status: 1, currencyPair: ...
- Android Service用法知识点的讲解
Android Service 学习Service相关知识点: android service 的基础知识,生命周期,service分类,运行地点(本地服务,远程服务),运行类型(前台服务,后台服务) ...
- Android Fragment用法知识点的讲解
Android Fragment用法的讲解 碎片,它的出现是为了更好展示UI的设计,让程序更加得到充分的展示.Fragment的出现,如微信的额主界面包含多个Fragment,使得微信功能更加简洁明了 ...
随机推荐
- Express application generator的使用
首先拷贝express官网的一篇文章: (http://expressjs.com/en/starter/generator.html ) Express application generator ...
- HDU 1541 Stars (线段树)
Problem Description Astronomers often examine star maps where stars are represented by points on ...
- CSDN博客QQ加群、微信
对于QQ加群我一直是拒绝的,不是自己摆姿态,而是实在没有这种影响力和能力.然而今日一朋友的话改变了我这种想法,所以尝试在CSDN博客首页上增加QQ加群功能.此博客也就权当一个记录(主要是为了上传一张二 ...
- C# .Net计算函数执行的时间
C#计算函数执行的时间 protected void StopwatchTest() { System.Diagnostics.Stopwatch stopwatch = new System.Dia ...
- uni-app - 上传图片组件
2018-12-29 更新1.0 2019-01-08 更新1.1 2019-01-29 更新1.3 重大更新 插件地址: http://ext.dcloud.net.cn/plugin?id= ...
- vue 模板如何解析
1.模板 一个最简答的模板: <div id="app"> {{ message }} </div> v-for模板: <ul id="ex ...
- js 原型链 prototype __proto__
1.说明 函数(Function)才有prototype属性,对象(除Object)拥有__proto__. 2.prototype与__proto__区别 示例: <!DOCTYPE html ...
- nodejs直接调用grunt(非调用批处理)
在windows下,我们做js构建工作,都习惯安装grunt-cli,只需要命令行grunt...一切构建工作都自动完成了.这已经是很完美的情况了,不过最近要做一个服务器版的自动化构建系统,在node ...
- 【Fanvas技术解密】HTML5 canvas实现脏区重绘
先说明一下,fanvas是笔者在企鹅公司开发的,即将开源的flash转canvas工具. 脏区重绘(dirty rectangle)并不是一门新鲜的技术了,这在最早2D游戏诞生的时候就已经存在. 复杂 ...
- golang 垃圾回收机制
用任何带 GC 的语言最后都要直面 GC 问题.在以前学习 C# 的时候就被迫读了一大堆 .NET Garbage Collection 的文档.最近也学习了一番 golang 的垃圾回收机制,在这里 ...