`
yidongkaifa
  • 浏览: 4059759 次
文章分类
社区版块
存档分类
最新评论

Android ListAdapter的高级功能

 
阅读更多


昨天某同学要转行做android,我问他ListView的Adapter用哪个,他说用SimpleAdapter。如果对Adapter的认识只停留在SimpleAdapter不是很够力啊。在学习android的时候大体都经历了SimpleAdapter->BaseAdapter的过程。对于一般应用,到BaseAdapter也就够了。BaseAdapter是ListAdapter的子类,给开发者提供了一些不常用方法的默认实现。而android还提供了更多的功能要靠ListAdapter接口使用。我假设看官们已经熟悉了BaseAdapter的使用,也知道了ListView重用view来展示数据这一点。所以捡重点说。

1. 关于刷新顺序

long getItemId(int position)
boolean hasStableIds()

getItemId是干嘛用的?在调用 invalidateView()时,ListView会刷新显示内容。如果内容的id是有效的,系统会跟据id来确定当前显示哪条内容,也就是firstVisibleChild的位置。id是否有效通过hasStableIds()确定。

2. 关于内容类型

int getItemViewType(int position)
int getViewTypeCount()

如果ListView需要显示多种类型的内容,就需要有不同的缓存拿来使用。举个例子,position是奇数时getView()返回的是A类型的View;偶数的时候返回B类型的View。那么就需要在getViewTypeCount()中返回2;在getItemViewType()中当position是单数时返回一个值,双数时返回另外一个值。ListView根据返回值缓存和重用View,这样在getView()中调用强制类型转换就不会出现类型转换错误了。

不同类型的View也可一用FrameLayout集成在一个View中显示,这样View的结构就会变得很复杂,而且消耗更多的内存。

3. 关于点击

boolean areAllItemsEnabled()
boolean isEnabled(int position)
如果不希望Item点击时出现背景颜色,就使用这两个方法。它们分别针对所有和单个View实现。以前找这个东西都是从ListView中找,却没注意它就在Adapter中。

4. 观察者模式?

registerDataSetObserver(DataSetObserver observer)
unregisterDataSetObserver(DataSetObserver observer)
这两个方法是系统希望在Adapter中数据有变化时得到通知。通知做啥?刷新进图条的长度^_^。

总的来说,android对ListView的考虑还是比较细致的。作为一般使用BaseAdapter就够用了,需要显示不同类型的View等特殊控制时去实现别的方法。


分享到:
评论

相关推荐

    自定义的ListAdapter实例 源代码

    自己定义的一个listAdapter 源代码

    Android-ListAdapter获取网络数据

    Android-ListAdapter获取网络数据,通过Gson进行json数据解析。使用AsyncHttpClient异步访问网络。

    Android ListView和ListAdapter.doc

    Android ListView和ListAdapter

    ListAdapter

    BaseExpandableListAdapter使用方法

    android-section-adapter:Android ListAdapter部分

    Android部分适配器一个与一起使用的简单android节适配器。用法在sample/签出示例应用程序,以查看其运行情况。 适配器希望您传递给它的集合已经按要分组的列进行排序。下载下载或通过Maven获取: < dependency> ...

    ListAdapter demo

    ListAdapter demo

    android studio实现安卓移动开发课程设计通讯录管理系统源代码.zip

    使用android studio 导入项目,修改文件定制自己想要的布局风格以及功能 如果导入项目后报错,哪么自己先创建好项目,将下载好的项目的代码进行复制 Phone、Datebase、ListAdapter、为单独的类,不是active布局 ...

    Android开发之ListView实现Item局部刷新

    对于android中的ListView刷新机制,大多数的程序员都是很熟悉的,修改或者添加adapter中的数据源之后,然后调用notifyDataSetChanged()刷新ListView。在这种模式下,我们会在getView中,根据不同的数据源,让控件...

    新浪微博开放平台开发-android客户端

    从这个星期开始,准备拿新浪微博开放平台做个实践,开发一个功能简单的android客户端,会尽可能的完善功能。 上图是这个客户端的主要界面。今天增加的功能。 1.简单的样式和皮肤,只是添加了按钮。 运行的系统是...

    基于android studio实现通讯录管理系统源代码,安卓移动开发课程设计

    使用android studio 导入项目,修改文件定制自己想要的布局风格以及功能 如果导入项目后报错,哪么自己先创建好项目,将下载好的项目的代码进行复制 Phone、Datebase、ListAdapter、为单独的类,不是active布局 ...

    Android ListView position详解及实例代码

    我们在使用ListView的时候,一般都会为ListView添加一个响应事件android.widget.AdapterView.OnItemClickListener。对OnItemClickListener的position和id参数,我相信有些人在这上面走了些弯路。  在使用listview的...

    Android代码-一个封装的SuperAdapter

    Adapter(ListAdapter, RecyclerView.Adapter) wrapper for android. Less code for redundant adapter. You won't need to write ViewHolder, createView, setTag, getTag, and confuse how to ...

    Android代码-LinearListView

    Android library that allows you to bind a LinearLayout with a ListAdapter. Download Gradle: dependencies { compile 'com.github.frankiesardo:linearlistview:1.0.1@aar' } Usage A simple example of the ...

    android_custom_swipe_refresh_listfragment:Android 自定义滑动刷新列表片段,带有加载指示器和空 ListAdapter 时尝试加载按钮

    Android 自定义滑动刷新列表片段 有 3 种状态: 1. 等待 ListAdapter 将被设置 2. ListAdapter 已设置,但 ListView 没有记录(项目) 3. ListAdapter 设置有 ListView 的记录(项目)。 此外,当将记录(项目)添加...

    Android代码-MultiChoiceAdapter

    MultiChoiceAdapter is an implementation of ListAdapter which adds support for modal multiple choice selection as in the native Gmail app. It provides a functionality similar to that of the CHOICE_...

    Android使用ListView批量删除item的方法

    本文实例讲述了Android使用ListView批量删除item的方法。分享给大家供大家参考,具体如下: 利用CheckBox选中一个或多个item,最后批量删除它们。 程序运行效果图如下:   下面开始上码: (代码已更正,已解决滚动时...

    xlistview代码

    import android.widget.ListAdapter; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.Scroller; import android.widget.TextView; import ...

    安卓JAVA真实公司开发OA项目

    1、真实公司开发Android JAVA项目MVC、MVP...5、控件:ListAdapter、RecyclerAdapter、ViewPager、Fragment、Glide 6、部分自定义工具类、部分自定义控件等、部分功能封装 7、主要使用onActivityResult及部分aidl回调

    《Android应用开发》个人总结报告.doc

    《Android应用开发》个人总结报告 刚开始接触Android感觉到它很有意思,在界面开发上和web也可以形成了相通的架构 ,更加方便,视觉上也是非常的酷,在前期我通过的大量的Android SDK开发范例大全中的例子以及...

    Android代码-Android-RecyclerViewHelper

    recyclerViewHelper = new RecyclerViewHelper(list_container, listAdapter); //设置没有数据的Tips recyclerViewHelper.setTipsEmptyView(R.layout.view_data_empty); //设置加载中的Tips recyclerViewHelper....

Global site tag (gtag.js) - Google Analytics