近期很多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更节省资源。
转自:http://www.pin5i.com/showtopic-arrayadapter-baseadapter.html
分享到:
相关推荐
android-custom-arrayadapter, 一个简单的示例应用程序,演示如何使用定制的ArrayAdapter Android中的定制ArrayAdapter示例这个应用程序演示如何创建和使用自定义ArrayAdapter来显示自定义列表项视图,该视图比标准...
•Android---UI篇---Tab Layout(选项卡布局) ...•Android---UI篇---ListView之ArrayAdapter(列表)---2 • •Android---UI篇---ListView之SimpleCursorAdapter(列表)---3 • •Android---UI篇---Menu(菜单)
ArrayAdapter for RecyclerView RecyclerView doesn't ship a ready to go RecyclerView.Adapter implementation as ListView did with the ArrayAdapter. This library is this missing ArrayAdapter. Easy to use...
下面我们将深入探讨这个库的核心知识点及其在实际应用中的使用方法。 首先,下拉刷新的基本工作原理是监听用户在ListView、RecyclerView或其他滚动视图顶部的下拉手势。当用户下拉到一定距离时,视图会显示一个动画...
本篇文章将深入解析ArrayAdapter的工作原理和使用方法。 首先,ArrayAdapter继承自BaseAdapter,这意味着它具备了BaseAdapter的基本功能,如获取数据源的大小、获取指定位置的数据等。ArrayAdapter的特性在于它简化...
这个压缩包文件"安卓Android源码——(列表ArrayAdapter适配).zip"很可能包含了关于如何在Android应用程序中使用ArrayAdapter来显示列表数据的示例代码和详细讲解。 ArrayAdapter是基于数组的数据适配器,它可以将...
在Android开发中,ArrayAdapter是一种常用的适配器...通过理解其工作原理和使用方法,开发者可以更好地构建动态且响应式的用户界面。无论是在简单的列表展示还是在复杂的自定义视图中,ArrayAdapter都能发挥关键作用。
Android中使用ArrayAdapter的demo,比较简单,里面用两种方法实现,在MainActivity里面,其中一种被我注释起来了,大家把注释去掉就好了。没有使用自定义适配器,对应的我的博客地址是:...
在Android开发中,GridView是一种非常常用的控件,它允许开发者以网格的形式展示数据,通常用于创建类似相册、菜单或列表的应用场景。...通过这些方法,我们可以创建出功能丰富、用户体验良好的Android应用。
android-custom-array-adapter-demo, Android演示如何使用定制适配器填充 ListView Android定制适配器演示这里示例演示如何使用自定义布局模板显示一个基于 array 数据源的ListView 。 在这种情况下,有一个 User ...
在安卓开发中,ArrayAdapter是一种常用的适配器,它用于将数据集与视图组件(如...这个资料包"安卓Android源码——(列表之ArrayAdapter适配)"提供的示例代码可以帮助你深入理解ArrayAdapter的使用,通过实践加深理解。
- 确定PopupWindow的位置,通常会相对于某个View(如一个Button)来定位,使用`showAsDropDown()`或`showAtLocation()`方法。 - 可以通过`setOutsideTouchable()`控制用户触摸PopupWindow外部时是否关闭...
2. **自定义布局**:在"Android-PickerView-master"项目中,开发者可能创建了一个自定义的View类,继承自Android的基础View或 ViewGroup,并重写了onDraw()方法来绘制3D效果。同时,需要处理触摸事件,使得用户可以...
ArrayAdapter<String> adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, choices); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner....
`refreshData()`方法是自定义的,它应该包含加载新数据的逻辑,比如使用网络请求库(如Retrofit、Volley或OkHttp)获取数据,然后更新ListView的数据源(ArrayAdapter、CursorAdapter等)并调用`adapter....
ArrayAdapter是Android SDK提供的一种适配器,专门用于将数据绑定到ListView中。本篇将深入探讨ArrayAdapter的工作原理及其在实际开发中的应用。 ArrayAdapter是Android中的一个抽象类,它是BaseAdapter的子类,...
- `setAdapter()`:设置PickerView的数据源,通常使用`ArrayAdapter`或自定义适配器。 - `setOnItemSelectedListener()`:监听用户的选择事件,当用户选择了一个新值时触发。 - `setSelection(int position)`:...
在Android应用开发中,"Android-Android联系人选择器"是一个常见的需求,它允许用户从他们的设备联系人列表中选择一个或多个联系人。这个功能广泛应用于消息发送、邀请发送等场景,提升用户体验并简化操作流程。在这...
这部分内容会讲解如何创建自定义适配器,如何使用`ArrayAdapter`或`CursorAdapter`绑定数据,以及如何实现列表项的点击和长按事件。同时,也会涉及到其他的布局管理器,如`GridView`和`RecyclerView`,它们在显示...