- 浏览: 826797 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
renzhengzhi:
请教一下楼主,公有云和私有云的开发,具体要做哪些工作呢?我拿到 ...
4,云的4 种模式 -
SangBillLee:
我用了solr5.5,用SolrQuery查询,没法高亮,不知 ...
solr5.x快速入门 -
lw900925:
这翻译读起来真是别扭。
solr in action翻译-第一章1.1 -
springjpa_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
Spring MVC性能提升 -
h416373073:
正遇到了此问题不知如何解决, 多谢分享
solr错误
ListView是Android开发过程中较为常见的组件之一,它将数据以列表的形式展现出来。一般而言,一个ListView由以下三个元素组 成:
1.View,用于展示列表,通常是一个xml所指定的。大家都知道Android的界面基本上是由xml文件负责完成的,所以ListView的界 面也理所应当的使用了xml定义。例如在ListView中经常用到的“android.R.layout.simple_list_item_1”等, 就是Android系统内部定义好的一个xml文件。
2.适配器,用来将不同的数据映射到View上。不同的数据对应不同的适配器,如ArrayAdapter,CursorAdapter, SimpleAdapter等, 他们能够将数组,指针指向的数据,Map等数据映射到View上。也正是由于适配器的存在,使得ListView的使用相当灵活,经过适配器的处理后,在 view看来所有的数据映射过来都是一样的。3.数据,具体的别映射的数据和资源,可以是字符串,图片等,通过适配器,这些数据将会被现实到 ListView上。所有的数据和资源要显示到ListView上都通过适配器来完成。
系统已有的适配器可以将基本的数据显示到ListView上,如:数组,Cursor指向的数据,Map里的数据。但是在实际开发中这些系统已实现 的适配器,有时不能满足我们的需求。而且系统自带的含有多选功能ListView在实际使用过程中会有一些问题。要实现复杂的ListView可以通过继 承ListView并重写相应的方法完成,同时也可以通过继承BaseAdapter来实现。通过文档可以看出,ArrayAdapter,CursorAdapter, SimpleAdapter都继承于BaseAdapter。所以通过继承BaseAdapter就可以完成自己的Adapter,可以将任何复杂组合的数据和资源,以任何你想要的显示效果展示给大家。
继承BaseAdapter之后,需要重写以下四个方法:getCount,getItem,getItemId,getView。
ListView绘制的过程如下:首先,系统在绘制ListView之前,将会先调用getCount方法来获取Item的个数。之后每绘制一个 Item就会调用一次getView方法,在此方法内就可以引用事先定义好的xml来确定显示的效果并返回一个View对象作为一个Item显示出来。也 正是在这个过程中完成了适配器的主要转换功能,把数据和资源以开发者想要的效果显示出来。也正是getView的重复调用,使得ListView的使用更 为简单和灵活。这两个方法是自定ListView显示效果中最为重要的,同时只要重写好了就两个方法,ListView就能完全按开发者的要求显示。而 getItem和getItemId方法将会在调用ListView的响应方法的时候被调用到。所以要保证ListView的各个方法有效的话,这两个方 法也得重写。比如:没有完成getItemId方法的功能实现的话,当调用ListView的getItemIdAtPosition方法时将会得不到想 要的结果,因为该方法就是调用了对应的适配器的getItemId方法。
另外,对于setTag方法是干什么的,SDK解释为
Tags
Unlike IDs, tags are not used to identify views. Tags are essentially an extra piece of information that can be associated with a view. They are most often used as a convenience to store data related to views in the views themselves rather than by putting them in a separate structure.
Tag不像ID是用标示view的。Tag从本质上来讲是就是相关联的view的额外的信息。它们经常用来存储一些view的数据,这样做非常方便而不用存入另外的单独结构。
convertView中的TAG
1. 对于使用了LayoutInflater对象进行View扩充的Tag的使用
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.vlist2, null);
holder.img = (ImageView) convertView.findViewById(R.id.img);
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.info = (TextView)
convertView.findViewById(R.id.info);
// setTag的妙用
convertView.setTag(holder);
} else {
// setTag的妙用
holder = (ViewHolder) convertView.getTag();
}
……略
}
首先我们要知道setTag方法是干什么的,他是给View对象的一个标签,标签可以是任何内容,我们这里把他设置成了一个对象,因为我们是把vlist2.xml的元素抽象出来成为一个类ViewHolder,用了setTag,这个标签就是ViewHolder实例化后对象的一个属性。我们之后对于ViewHolder实例化的对象holder的操作,都会因为java的引用机制而一直存活并改变convertView的内容,而不是每次都是去new一个。我们就这样达到的重用——我希望我说清楚了。如果有更简单的解释,请指教。
这是我们在Adapter中的使用,那么我们在这里不使用Tag标签会怎么样呢?
我们试想,如果我们不用Tag标签,那么我们的对象如何与convertView缓存结合并达到合理的效率利用?貌似答案并不明朗——所以使用Tag是比较明智的做法。
2. 对于没有使用LayoutInflater对象进行View扩充的Tag的使用。
if (convertView != null) {
view = convertView;
...
} else {
view = new Xxx(...);
...
}
这是我们的程序,我们看到,貌似没有用Tag——是的,当没有使用LayoutInflater进行View的扩充的时候,是没有必要用的,虽然也可以用。
发表评论
-
Android SDK更新 Connection to http://dl-ssl.google.com refused 解决方法 .
2013-10-10 11:38 1182问题描述使用SDK Manager ... -
android 对话框中的进度条 (ProgressDialog)
2012-03-10 00:16 2560显然要定义对话框进 ... -
Android开发学习笔记WebView
2012-02-28 21:59 5112WebView(网络视图)能加载 ... -
AsyncTask的用法
2012-02-27 21:36 883在开发Android应用时必须遵守单线程模型的原则: An ... -
android中的ellipsize
2012-02-26 17:47 1062最近为了解决某个bug,textview中内容过长的话自动 ... -
BaseExpandableListAdapter
2012-02-26 17:40 1547转载自:中国手机开 ... -
使用命令安装apk的方法
2012-02-26 15:44 1686使用命令安装apk的方法, 第一步,将应用防止在androi ... -
Android PendingIntent和Intent的区别
2012-02-16 22:39 1722以前在学习AlarmManager里面会遇到PendingI ... -
android中gallery的使用
2012-02-13 22:52 25111,创建配置文件 <?xml version=&quo ... -
android的tabHost的使用
2012-02-13 22:10 1564废话不多,直接介绍怎么使用 1,用几个tab,就建立几个ta ... -
android源码解析之二ApplicaitonInfo和PackageManager
2012-02-07 13:26 2241ApplicationInfo ApplicationIn ... -
android源码解读一(Context)
2012-02-05 21:13 4247Context类 Context是一个抽象类 public ... -
android 属性android:visibility
2012-02-05 12:16 933此属性意思是此视图是否显示, 例如RelativeLayou ... -
android默认焦点设置的方法
2012-02-05 12:13 18898在使用到文本框(EditText)来进行数据录入的时候,有时默 ... -
imageView.setScaleType
2012-02-03 17:36 5979imageView.setScaleType(ImageVie ... -
文件在SD卡存储
2012-02-02 10:47 1754手机的存储空间分俩种,一种是手机自带的,另一种是SD卡,(外存 ... -
广播接收者
2012-02-02 10:45 1212广播接受者(BroadcastReceiv ... -
android的服务
2012-02-02 10:45 972服务android中服务和window中的服务是类似的东西,服 ... -
android资源的应用
2012-02-02 10:43 1454color颜色在配置文件中定义路径:res/values/co ... -
android图片的旋转和缩放
2012-02-02 10:42 1700使用Android中的Matrix类实现 //加载需要操 ...
相关推荐
19Android-16-listviewBaseAdapter.mp4
ListView与BaseAdapter的配套使用 理解android 中adapter适配的作用 以及ListView的优化方式
Android ListView下拉刷新 Demo.rar
Android ListView下拉刷新 Demo.zip源码资源下载Android ListView下拉刷新 Demo.zip源码资源下载
Android ListView分页功能源码.zip源码资源下载Android ListView分页功能源码.zip源码资源下载
Android ListView反弹效果源码.zip源码资源下载Android ListView反弹效果源码.zip源码资源下载
AndroidListView反弹效果源码.zip
Android ListView下拉刷新 Demo.zip
Android ListView分页功能源码.rar
Android ListView反弹效果源码.rar
Android ListView下拉刷新 Demo.zip项目安卓应用源码下载Android ListView下拉刷新 Demo.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
Android ListView分页功能源码.zip项目安卓应用源码下载Android ListView分页功能源码.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考