近期很多Android开发者来函表示对ArrayAdapter和BaseAdapter的区别不是很清楚,这里Android123简单说下他们的关系和用处,ArrayAdapter是从BaseAdapter派生出来的,具备BaseAdapter的所有功能,但ArrayAdapter更为强大,它实例化时可以直接使用泛型构造,我们在Android SDK中可以看到android.widget.ArrayAdapter的字样,当然也可以使用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 {
protected LayoutInflater mInflater;
private static final int mResource = R.layout.icon_list_item; //xml布局文件
public IconListAdapter(Context context,
List 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 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 comparator) //这里是android开发网经常用的排序,使用arrayadapter可以直接排序,十分方便
所以最终android123推荐大家什么情况使用arrayadapter,什么时候使用baseadapter。当数量较多,比如超过100条或频繁动态增减时使用arrayadapter可以方便控制ui,通过setNotifyOnChanage方法,如果比较简单仅仅呈现直接从baseadapter更节省资源
分享到:
相关推荐
本篇将详细讲解ListView与ArrayAdapter、BaseAdapter、SimpleAdapter以及SimpleCursorAdapter的配合使用。 1. **ArrayAdapter** ArrayAdapter是最基础的适配器,它将Java对象数组或ArrayList与ListView进行关联。...
本文将深入探讨这两种适配器的使用方法和它们之间的区别。 首先,ArrayAdapter是Android SDK内置的基本适配器,主要用于将数组或集合中的数据绑定到ListView。它继承自BaseAdapter,提供了一个简洁的接口来创建列表...
首先,理解BaseAdapter与ArrayAdapter的区别是重要的。ArrayAdapter是预设的适配器,它直接绑定到一个数组或ArrayList对象上,而BaseAdapter则提供了一个更通用的框架,允许开发者自定义数据源和视图的绑定逻辑。...
本教程将深入讲解ListView的基础用法,以及与之相关的ArrayAdapter、BaseAdapter和SimpleAdapter。 首先,我们来谈谈ArrayAdapter。ArrayAdapter是ListView中最简单的适配器,它用于将数组中的数据绑定到ListView上...
- Android提供了其他类型的Adapter,如ArrayAdapter、CursorAdapter等,它们都是基于BaseAdapter进行封装,适用于特定场景。 - RecyclerView是后来推出的更灵活的列表组件,虽然不直接继承自BaseAdapter,但可以...
2. 数据监听:如果数据集是动态变化的,可以实现`BaseAdapter`的`registerDataSetObserver()`和`unregisterDataSetObserver()`方法,监听数据集的变化。 总结,ListView与ArrayAdapter的结合使用是Android开发中...
在Android开发中,BaseAdapter是一个核心组件,它用于将数据绑定到可滚动的视图上,如...此外,BaseAdapter还为更复杂的适配器,如CursorAdapter和ArrayAdapter,提供了基础,这些都是Android开发中不可或缺的工具。
BaseAdapter是所有自定义适配器的基类,包括ArrayAdapter、SimpleAdapter等。它的主要职责是将数据模型转换为ListView可以显示的View。通过重写BaseAdapter中的几个关键方法,我们可以定制化数据的显示方式: 1. `...
ArrayAdapter是Android SDK提供的一种基础适配器,它继承自BaseAdapter,专门用于处理数组或ArrayList类型的数据源。ArrayAdapter的主要功能是将数据转换为ListView或GridView的列表项,并负责更新视图。 二、...
ArrayAdapter是Android中的一个抽象类,它是BaseAdapter的子类,主要用于将数据集(如数组或ArrayList)中的数据转换为ListView可显示的视图(View)。ArrayAdapter的主要功能包括: 1. 数据绑定:ArrayAdapter会...
这个压缩包文件"安卓Android源码——(列表ArrayAdapter适配).zip"很可能包含了关于如何在Android应用程序中使用ArrayAdapter来显示列表数据的示例代码和详细讲解。 ArrayAdapter是基于数组的数据适配器,它可以将...
在Android开发中,ListView、SQLite和BaseAdapter是三个经常一起使用的组件,它们共同实现数据展示与数据持久化的功能。 1. ListView组件 ListView是一个视图组件,它能够在垂直滚动的方向上显示一系列的数据项。每...
另外,对于复杂的业务场景,还可以自定义适配器,继承BaseAdapter类,实现`getCount()`、`getItem()`、`getItemId()`和`getView()`方法,以满足更具体的需求。 总之,ArrayAdapter和SimpleAdapter是Android开发中...
本篇文章将深入探讨ListView的三种常见使用方法:ArrayAdapter、SimpleAdapter和BaseAdapter,以及它们各自的特点和适用场景。 首先,我们来看ArrayAdapter。ArrayAdapter是ListView最基础的适配器,主要用于绑定...
它继承自BaseAdapter,实现了数据和视图之间的桥梁。ArrayAdapter有四个主要的构造函数,每个构造函数都需要传入上下文(Context)、布局资源ID、数据集以及数据类型。布局资源ID通常是一个XML文件,定义了列表项的UI...
3. 实现适配器:继承`BaseAdapter`或使用已有的适配器(如`ArrayAdapter`),并重写其中的方法以填充数据和创建列表项视图。 4. 绑定适配器:调用`ListView.setAdapter(adapter)`,将适配器与`ListView`关联。 ### ...
在实际应用中,可能会遇到更复杂的需求,比如需要在每个单元格中显示图文并茂的内容,这时可能需要创建自定义的`Adapter`,继承自`BaseAdapter`或`ArrayAdapter`,并重写`getCount()`, `getItem()`, `getItemId()`...
ArrayAdapter是Android SDK提供的一个基类,它是BaseAdapter的一个子类。它的主要功能是将数组中的数据转换为可显示在ListView或其他列表视图中的View。ArrayAdapter需要三个参数:上下文(Context),视图资源ID...
ArrayAdapter是BaseAdapter的一个子类,通过继承BaseAdapter并为其增加了一些便利的功能,使得开发者可以更轻松地将数据集与ListView进行关联。 ArrayAdapter的主要特点在于它支持直接使用泛型,这使得我们可以直接...