`
chenhaodejia
  • 浏览: 115175 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ArrayAdapter和BaseAdapter的区别是什么

阅读更多
  近期很多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配合使用实例。

    本篇将详细讲解ListView与ArrayAdapter、BaseAdapter、SimpleAdapter以及SimpleCursorAdapter的配合使用。 1. **ArrayAdapter** ArrayAdapter是最基础的适配器,它将Java对象数组或ArrayList与ListView进行关联。...

    ArrayAdapter和SimpleAdapter使用

    本文将深入探讨这两种适配器的使用方法和它们之间的区别。 首先,ArrayAdapter是Android SDK内置的基本适配器,主要用于将数组或集合中的数据绑定到ListView。它继承自BaseAdapter,提供了一个简洁的接口来创建列表...

    实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。

    首先,理解BaseAdapter与ArrayAdapter的区别是重要的。ArrayAdapter是预设的适配器,它直接绑定到一个数组或ArrayList对象上,而BaseAdapter则提供了一个更通用的框架,允许开发者自定义数据源和视图的绑定逻辑。...

    ListViewDemo

    本教程将深入讲解ListView的基础用法,以及与之相关的ArrayAdapter、BaseAdapter和SimpleAdapter。 首先,我们来谈谈ArrayAdapter。ArrayAdapter是ListView中最简单的适配器,它用于将数组中的数据绑定到ListView上...

    baseadapter

    - Android提供了其他类型的Adapter,如ArrayAdapter、CursorAdapter等,它们都是基于BaseAdapter进行封装,适用于特定场景。 - RecyclerView是后来推出的更灵活的列表组件,虽然不直接继承自BaseAdapter,但可以...

    ListView使用ArrayAdapter适配器

    2. 数据监听:如果数据集是动态变化的,可以实现`BaseAdapter`的`registerDataSetObserver()`和`unregisterDataSetObserver()`方法,监听数据集的变化。 总结,ListView与ArrayAdapter的结合使用是Android开发中...

    android demo,baseAdapter的应用

    在Android开发中,BaseAdapter是一个核心组件,它用于将数据绑定到可滚动的视图上,如...此外,BaseAdapter还为更复杂的适配器,如CursorAdapter和ArrayAdapter,提供了基础,这些都是Android开发中不可或缺的工具。

    用BaseAdapter实现的ListView

    BaseAdapter是所有自定义适配器的基类,包括ArrayAdapter、SimpleAdapter等。它的主要职责是将数据模型转换为ListView可以显示的View。通过重写BaseAdapter中的几个关键方法,我们可以定制化数据的显示方式: 1. `...

    安卓Android源码——(列表之ArrayAdapter适配).zip

    ArrayAdapter是Android SDK提供的一种基础适配器,它继承自BaseAdapter,专门用于处理数组或ArrayList类型的数据源。ArrayAdapter的主要功能是将数据转换为ListView或GridView的列表项,并负责更新视图。 二、...

    Android应用源码之(列表之ArrayAdapter适配).zip

    ArrayAdapter是Android中的一个抽象类,它是BaseAdapter的子类,主要用于将数据集(如数组或ArrayList)中的数据转换为ListView可显示的视图(View)。ArrayAdapter的主要功能包括: 1. 数据绑定:ArrayAdapter会...

    安卓Android源码——(列表ArrayAdapter适配).zip

    这个压缩包文件"安卓Android源码——(列表ArrayAdapter适配).zip"很可能包含了关于如何在Android应用程序中使用ArrayAdapter来显示列表数据的示例代码和详细讲解。 ArrayAdapter是基于数组的数据适配器,它可以将...

    Android中ListView,SQLite,BaseAdapter的结合[参照].pdf

    在Android开发中,ListView、SQLite和BaseAdapter是三个经常一起使用的组件,它们共同实现数据展示与数据持久化的功能。 1. ListView组件 ListView是一个视图组件,它能够在垂直滚动的方向上显示一系列的数据项。每...

    Android之ListView<3>ArrayAdapter,SimpleAdapter

    另外,对于复杂的业务场景,还可以自定义适配器,继承BaseAdapter类,实现`getCount()`、`getItem()`、`getItemId()`和`getView()`方法,以满足更具体的需求。 总之,ArrayAdapter和SimpleAdapter是Android开发中...

    Android基础:ListView三种使用方法

    本篇文章将深入探讨ListView的三种常见使用方法:ArrayAdapter、SimpleAdapter和BaseAdapter,以及它们各自的特点和适用场景。 首先,我们来看ArrayAdapter。ArrayAdapter是ListView最基础的适配器,主要用于绑定...

    安卓Android源码——(列表ArrayAdapter适配).rar

    它继承自BaseAdapter,实现了数据和视图之间的桥梁。ArrayAdapter有四个主要的构造函数,每个构造函数都需要传入上下文(Context)、布局资源ID、数据集以及数据类型。布局资源ID通常是一个XML文件,定义了列表项的UI...

    webview与ListView、BaseAdapter实现方法

    3. 实现适配器:继承`BaseAdapter`或使用已有的适配器(如`ArrayAdapter`),并重写其中的方法以填充数据和创建列表项视图。 4. 绑定适配器:调用`ListView.setAdapter(adapter)`,将适配器与`ListView`关联。 ### ...

    android 动态文字排版 GridView与ArrayAdapter设计

    在实际应用中,可能会遇到更复杂的需求,比如需要在每个单元格中显示图文并茂的内容,这时可能需要创建自定义的`Adapter`,继承自`BaseAdapter`或`ArrayAdapter`,并重写`getCount()`, `getItem()`, `getItemId()`...

    应用源码之(列表之ArrayAdapter适配).zip

    ArrayAdapter是Android SDK提供的一个基类,它是BaseAdapter的一个子类。它的主要功能是将数组中的数据转换为可显示在ListView或其他列表视图中的View。ArrayAdapter需要三个参数:上下文(Context),视图资源ID...

    简单好用的Adapter—ArrayAdapter详解

    ArrayAdapter是BaseAdapter的一个子类,通过继承BaseAdapter并为其增加了一些便利的功能,使得开发者可以更轻松地将数据集与ListView进行关联。 ArrayAdapter的主要特点在于它支持直接使用泛型,这使得我们可以直接...

Global site tag (gtag.js) - Google Analytics