昨天某同学要转行做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 源代码
Android-ListAdapter获取网络数据,通过Gson进行json数据解析。使用AsyncHttpClient异步访问网络。
Android ListView和ListAdapter
BaseExpandableListAdapter使用方法
Android部分适配器一个与一起使用的简单android节适配器。用法在sample/签出示例应用程序,以查看其运行情况。 适配器希望您传递给它的集合已经按要分组的列进行排序。下载下载或通过Maven获取: < dependency> ...
ListAdapter demo
使用android studio 导入项目,修改文件定制自己想要的布局风格以及功能 如果导入项目后报错,哪么自己先创建好项目,将下载好的项目的代码进行复制 Phone、Datebase、ListAdapter、为单独的类,不是active布局 ...
对于android中的ListView刷新机制,大多数的程序员都是很熟悉的,修改或者添加adapter中的数据源之后,然后调用notifyDataSetChanged()刷新ListView。在这种模式下,我们会在getView中,根据不同的数据源,让控件...
从这个星期开始,准备拿新浪微博开放平台做个实践,开发一个功能简单的android客户端,会尽可能的完善功能。 上图是这个客户端的主要界面。今天增加的功能。 1.简单的样式和皮肤,只是添加了按钮。 运行的系统是...
使用android studio 导入项目,修改文件定制自己想要的布局风格以及功能 如果导入项目后报错,哪么自己先创建好项目,将下载好的项目的代码进行复制 Phone、Datebase、ListAdapter、为单独的类,不是active布局 ...
我们在使用ListView的时候,一般都会为ListView添加一个响应事件android.widget.AdapterView.OnItemClickListener。对OnItemClickListener的position和id参数,我相信有些人在这上面走了些弯路。 在使用listview的...
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 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 自定义滑动刷新列表片段 有 3 种状态: 1. 等待 ListAdapter 将被设置 2. ListAdapter 已设置,但 ListView 没有记录(项目) 3. ListAdapter 设置有 ListView 的记录(项目)。 此外,当将记录(项目)添加...
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的方法。分享给大家供大家参考,具体如下: 利用CheckBox选中一个或多个item,最后批量删除它们。 程序运行效果图如下: 下面开始上码: (代码已更正,已解决滚动时...
import android.widget.ListAdapter; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.Scroller; import android.widget.TextView; import ...
1、真实公司开发Android JAVA项目MVC、MVP...5、控件:ListAdapter、RecyclerAdapter、ViewPager、Fragment、Glide 6、部分自定义工具类、部分自定义控件等、部分功能封装 7、主要使用onActivityResult及部分aidl回调
《Android应用开发》个人总结报告 刚开始接触Android感觉到它很有意思,在界面开发上和web也可以形成了相通的架构 ,更加方便,视觉上也是非常的酷,在前期我通过的大量的Android SDK开发范例大全中的例子以及...
recyclerViewHelper = new RecyclerViewHelper(list_container, listAdapter); //设置没有数据的Tips recyclerViewHelper.setTipsEmptyView(R.layout.view_data_empty); //设置加载中的Tips recyclerViewHelper....