- 浏览: 842627 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
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 1218问题描述使用SDK Manager ... -
android 对话框中的进度条 (ProgressDialog)
2012-03-10 00:16 2599显然要定义对话框进 ... -
Android开发学习笔记WebView
2012-02-28 21:59 5152WebView(网络视图)能加载 ... -
AsyncTask的用法
2012-02-27 21:36 911在开发Android应用时必须遵守单线程模型的原则: An ... -
android中的ellipsize
2012-02-26 17:47 1097最近为了解决某个bug,textview中内容过长的话自动 ... -
BaseExpandableListAdapter
2012-02-26 17:40 1577转载自:中国手机开 ... -
使用命令安装apk的方法
2012-02-26 15:44 1717使用命令安装apk的方法, 第一步,将应用防止在androi ... -
Android PendingIntent和Intent的区别
2012-02-16 22:39 1767以前在学习AlarmManager里面会遇到PendingI ... -
android中gallery的使用
2012-02-13 22:52 25331,创建配置文件 <?xml version=&quo ... -
android的tabHost的使用
2012-02-13 22:10 1591废话不多,直接介绍怎么使用 1,用几个tab,就建立几个ta ... -
android源码解析之二ApplicaitonInfo和PackageManager
2012-02-07 13:26 2293ApplicationInfo ApplicationIn ... -
android源码解读一(Context)
2012-02-05 21:13 4272Context类 Context是一个抽象类 public ... -
android 属性android:visibility
2012-02-05 12:16 984此属性意思是此视图是否显示, 例如RelativeLayou ... -
android默认焦点设置的方法
2012-02-05 12:13 18996在使用到文本框(EditText)来进行数据录入的时候,有时默 ... -
imageView.setScaleType
2012-02-03 17:36 6055imageView.setScaleType(ImageVie ... -
文件在SD卡存储
2012-02-02 10:47 1807手机的存储空间分俩种,一种是手机自带的,另一种是SD卡,(外存 ... -
广播接收者
2012-02-02 10:45 1237广播接受者(BroadcastReceiv ... -
android的服务
2012-02-02 10:45 1019服务android中服务和window中的服务是类似的东西,服 ... -
android资源的应用
2012-02-02 10:43 1479color颜色在配置文件中定义路径:res/values/co ... -
android图片的旋转和缩放
2012-02-02 10:42 1755使用Android中的Matrix类实现 //加载需要操 ...
相关推荐
在Android开发中,ListView是一个非常重要的组件,常用于展示大量数据列表。BaseAdapter则是与ListView配合使用的数据适配器,负责将数据绑定到ListView的各个视图上。本篇文章将深入探讨ListView与BaseAdapter的...
在这个"Android之ListView+BaseAdapter左右按键切换"的项目中,我们将会深入探讨如何利用ListView结合BaseAdapter实现通过键盘左右按键来切换并更新ListView中的数据。BaseAdapter是Android系统提供的一种适配器,它...
在Android中,ListView的分页通常通过Adapter类来实现,如BaseAdapter或CursorAdapter。当用户滚动到列表底部时,会触发加载更多数据的逻辑。这一过程涉及以下几个关键知识点: 1. **监听器OnScrollListener**:...
在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。这个"Android ListView下拉刷新 Demo.zip"文件很显然是一个示例项目,演示了如何在ListView中实现下拉刷新的功能。下拉刷新是移动应用中常见的...
在Android开发中,ListView是一种常用的组件,用于展示大量的数据列表。"Android ListView下拉刷新 Demo.rar" 提供...对于Android新手,这是一个很好的实践案例,可以帮助他们理解和掌握ListView及下拉刷新的实现原理。
总之,理解并掌握在Android ListView中实现分页功能是移动开发中的重要技能。这个源码示例为你提供了一个实践和学习的平台,帮助你更好地理解和应用这一技术。通过研究和学习这个示例,你可以提升自己的Android开发...
在Android开发中,ListView是一种常用的组件,用于展示大量的数据列表。然而,在实现ListView时,我们可能会遇到一个问题,即加载不同布局导致的`ClassCastException`异常。这个异常通常出现在尝试将一个对象强制...
在Android开发中,ListView是一种常用的视图组件,用于展示大量数据...通过学习和实践这个项目,开发者不仅可以掌握如何在ListView中实现时间轴效果,还能加深对Android UI组件和数据绑定的理解,提升自己的开发技能。
本教程将通过一个名为"android应用源码Android重写listview实现下拉刷新.zip"的压缩包,深入探讨如何在Android中自定义ListView并实现下拉刷新功能。这个压缩包包含了一份用于学习和参考的源码,主要涉及以下几个...
这份"Android listView学习源码.zip"提供了学习ListView使用和优化的基础示例,适合初学者深入理解其工作原理。 ListView的工作机制主要基于Adapter模式,Adapter是连接数据源和ListView的桥梁。在Android中,我们...
在Android开发中,ListView、SQLite和BaseAdapter是三个至关重要的组件,它们共同协作,使得应用程序能够展示和管理大量数据。ListView是一种可滚动的视图,用于显示一系列项,而SQLite是一个轻量级的数据库系统,...
本压缩包"可复用的BaseAdapter.rar"可能包含了一个通用的BaseAdapter实现,旨在提高代码的复用性,减少重复工作,优化开发效率。 BaseAdapter的基本原理是通过重写其方法来绑定数据到UI控件上。它主要有以下几个...
首先,我们需要理解ListView的基本结构。ListView通常与一个Adapter配合工作,Adapter是数据源和视图之间的桥梁,它负责将数据转化为ListView可以显示的列表项。在Xamarin.Android中,我们可以使用BaseAdapter或已有...
本示例“安卓Android源码——ListView下拉刷新 Demo.zip”提供了一个具体的实现,帮助开发者理解和实现这一功能。 首先,我们要了解下拉刷新的基本原理。下拉刷新通常由两部分组成:UI动画和数据加载逻辑。UI动画是...
在Android应用开发中,ListView是常用...通过深入研究和实践这个"Android应用源码 ListView下拉刷新 Demo"项目,开发者可以更好地理解和掌握如何在Android应用中实现在ListView上的下拉刷新功能,提升应用的用户体验。
这个压缩包“Android应用源码之ListView滚动气泡提示.zip”可能包含了实现这一功能的源代码示例,帮助开发者理解并学习如何在自己的应用中添加这种滚动提示。 首先,我们需要了解ListView的基本原理。ListView通过...