- 浏览: 5818812 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (890)
- WindowsPhone (0)
- android (88)
- android快速迭代 (17)
- android基础 (34)
- android进阶 (172)
- android高级 (0)
- android拾遗 (85)
- android动画&效果 (68)
- Material Design (13)
- LUA (5)
- j2me (32)
- jQuery (39)
- spring (26)
- hibernate (20)
- struts (26)
- tomcat (9)
- javascript+css+html (62)
- jsp+servlet+javabean (14)
- java (37)
- velocity+FCKeditor (13)
- linux+批处理 (9)
- mysql (19)
- MyEclipse (9)
- ajax (7)
- wap (8)
- j2ee+apache (24)
- 其他 (13)
- phonegap (35)
最新评论
-
Memories_NC:
本地lua脚本终于执行成功了,虽然不是通过redis
java中调用lua脚本语言1 -
ZHOU452840622:
大神://处理返回的接收状态 这个好像没有监听到 遇 ...
android 发送短信的两种方式 -
PXY:
拦截部分地址,怎么写的for(int i=0;i<lis ...
判断是否登录的拦截器SessionFilter -
maotou1988:
Android控件之带清空按钮(功能)的AutoComplet ...
自定义AutoCompleteTextView -
yangmaolinpl:
希望有表例子更好。。。,不过也看明白了。
浅谈onInterceptTouchEvent、onTouchEvent与onTouch
如果对效率要求比较高的话可以采用这种办法,唯一的缺点就是多了一个内部类ViewHolder。
但这样需要的Adapter一多,每次都要将代码repeat。 有一种简洁的写法分享给大家。
ViewHolder这么写(只提供一个静态方法)
在getView里这样
把这个ViewHolder类加入自己的utils,一劳永逸了以后。注意SparseArray这个知识点,优化过的存储integer和object键值对的hashmap。
下面是一个github上的开源项目小工具,更cool更简洁! 核心同样是使用SparseArray存储id+view,但更巧妙的是使用Builder模式进一步封装了常用的控件方法,进一步简化了代码~
地址是 https://github.com/JoanZapata/base-adapter-helper
getView(int pos, View convertView, ViewGroup parent)里的pos嘛
public View getView(int pos, View convertView, ViewGroup parent){ ViewHolder holder; if (convertView == null) { holder=new ViewHolder(); convertView = mInflater.inflate(R.layout.list_item, null); holder.text = (TextView) convertView.findViewById( R.id.text)); holder.icon = (ImageView) convertView.findViewButId( R.id.icon)); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.text.setText(DATA[pos]); holder.icon.setImageBitmap((pos & 1) == 1 ? mIcon1 : mIcon2); return convertView; } static class ViewHolder { TextView text; ImageView icon; }
但这样需要的Adapter一多,每次都要将代码repeat。 有一种简洁的写法分享给大家。
ViewHolder这么写(只提供一个静态方法)
public class ViewHolder { // I added a generic return type to reduce the casting noise in client code @SuppressWarnings("unchecked") public static <T extends View> T get(View view, int id) { SparseArray<View> viewHolder = (SparseArray<View>) view.getTag(); if (viewHolder == null) { viewHolder = new SparseArray<View>(); view.setTag(viewHolder); } View childView = viewHolder.get(id); if (childView == null) { childView = view.findViewById(id); viewHolder.put(id, childView); } return (T) childView; } }
在getView里这样
@Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(context) .inflate(R.layout.banana_phone, parent, false); } ImageView bananaView = ViewHolder.get(convertView, R.id.banana); TextView phoneView = ViewHolder.get(convertView, R.id.phone); BananaPhone bananaPhone = getItem(position); phoneView.setText(bananaPhone.getPhone()); bananaView.setImageResource(bananaPhone.getBanana()); return convertView; }
把这个ViewHolder类加入自己的utils,一劳永逸了以后。注意SparseArray这个知识点,优化过的存储integer和object键值对的hashmap。
下面是一个github上的开源项目小工具,更cool更简洁! 核心同样是使用SparseArray存储id+view,但更巧妙的是使用Builder模式进一步封装了常用的控件方法,进一步简化了代码~
地址是 https://github.com/JoanZapata/base-adapter-helper
评论
3 楼
gundumw100
2012-05-03
lizhanzhishang 写道
holder.icon.setImageBitmap((pos & 1) == 1 ? mIcon1 : mIcon2);
这里的pos是怎么得到的?(pos & 1)这点不懂,请指教
这里的pos是怎么得到的?(pos & 1)这点不懂,请指教
getView(int pos, View convertView, ViewGroup parent)里的pos嘛
2 楼
lizhanzhishang
2012-05-03
还有个问题:为什么会有好多的数据来填充整个View?这是系统默认的,还是什么原因?可以修改为,自己想要的数据量嘛?谢谢
1 楼
lizhanzhishang
2012-05-03
holder.icon.setImageBitmap((pos & 1) == 1 ? mIcon1 : mIcon2);
这里的pos是怎么得到的?(pos & 1)这点不懂,请指教
这里的pos是怎么得到的?(pos & 1)这点不懂,请指教
发表评论
-
某些android手机获取不到IMEI问题
2018-08-21 14:17 7629某些山寨机可能拿不到IMEI 如果非要IMEI可以模拟一个 ... -
APK安装成功后点击"打开"再按Home键应用会重启的问题
2018-08-21 14:13 2766安装系统SD卡里面的apk或者原有的程序更新版本的时候, ... -
使用volley链接Https地址时报SSLHandshakeException
2018-08-21 14:06 2129在真实设备上出现以下错误 ︰ Volley error: ... -
PhotoView+Viewpager双指缩放的时候出现pointerIndex out of range问题
2017-07-10 14:30 4243PhotoView+Viewpager开发图集效果的时候,在某 ... -
Android6.0权限封装
2017-04-01 12:04 1569简介 Android6.0中对权限分为了一般权限和危险权限。 ... -
实现点击 WebView 中的图片,调用原生控件展示图片
2017-04-01 11:14 2808现在有很多时候,我们的 App 都进行了混合开发,而最简单,最 ... -
Android 方法引用数超过 65535 优雅解决
2017-03-31 09:37 1539随着应用不断迭代更新,业务线的扩展,应用越来越大(比如:集成了 ... -
android引用资源@与属性?备忘单
2017-03-30 10:09 1287几天前我偶然发现了我A ... -
ViewPager 与SwipeRefreshLayout,RecyclerView,ScrollView滑动冲突解决方法
2017-03-30 09:55 6564ViewPager 作为一个横向滚动的控件, 在 ViewGr ... -
Android中一些你可能没注意的小效果实现
2017-02-15 21:09 0http://www.see-source.com/blog/ ... -
Android热修复:Andfix和Hotfix,两种方案的比较与实现
2017-02-15 21:00 0http://www.see-source.com/blog/ ... -
Android 从网页中跳转到本地App
2017-01-11 09:27 1880我们在使用微信、QQ、京东等app的时候,会发现有时候通过他们 ... -
Activity的启动模式和onNewIntent
2016-12-28 09:10 1333一、启动模式介绍 启 ... -
android5.0使用Notification报RemoteServiceException的解决办法
2016-08-31 16:13 11541有时android5.0下使用Notification会报如下 ... -
RecyclerView 中的 item 如何居中问题
2016-05-18 09:52 12533一个很简单的Item布局,我只要让它由上而下排列,文字居中 ... -
sqlite3:not found 解决方法
2015-12-08 16:03 2554最最最重要,先root你的手机吧 sqlite3 为一个可 ... -
隐藏底部虚拟键NavigationBar实现全屏
2015-10-08 17:20 9852import android.app.Activity; ... -
服务端执行慢或网络延迟时,Volley多次发送请求的问题
2015-07-27 15:40 6996原文: Android Volley double post ... -
如何获取 Android 设备的CPU核数、时钟频率以及内存大小
2015-06-30 17:04 4380原帖: http://www.jianshu.com/p/f7 ... -
android点滴5
2015-04-10 17:32 2048一些小效果的实现 http://www.see-source. ...
相关推荐
"ListView使用ViewHolder模式提高效率"这一主题就是解决这个问题的关键知识点。 ViewHolder模式是Android开发中为了提升ListView性能而设计的一种优化策略。它通过减少findViewById的调用来改善视图的绘制速度。在...
ViewHolder模式则提高了列表项的重用效率,避免了频繁的findViewById操作,提高了性能。 二、ListView的工作原理 1. 数据绑定:ListView通过Adapter获取数据源,并调用getView()方法生成或复用列表项。开发者通常...
- 使用ViewHolder模式减少查找视图的时间。 - 使用懒加载技术,只加载可视范围内的数据。 - 避免在getView()方法中执行耗时操作,如网络请求和图片解码。 - 考虑使用RecyclerView替代ListView,RecyclerView提供...
在Android的ListView中,AdapterView类(包括ListView)实现了视图复用机制,称为ViewHolder模式。ViewHolder模式的主要思想是缓存视图的引用,避免在滚动过程中频繁地查找和创建视图。当一个项目离开屏幕时,它的...
- 适当地使用ViewHolder模式优化Adapter的效率。 总之,Android的下拉式選單(Spinner)是开发者常用的一种交互组件,通过合理地配置Adapter和监听事件,可以实现丰富的功能。理解其工作原理和使用技巧,有助于...
- **ViewHolder模式**:为了提高ListView和GridView的滚动性能,开发者通常会采用ViewHolder模式,避免频繁创建和复用视图。 - **ListView的setAdapter方法**:在数据加载完毕后再调用`setAdapter`,避免在UI线程...
3. **ViewHolder模式** 为了提高ListView的滚动性能,源码可能使用了ViewHolder设计模式。ViewHolder是一个内部类,持有列表项视图中的各个子视图引用,避免了每次绘制时查找视图的操作,从而提高了效率。 4. **...
此外,可以使用ViewHolder模式减少查找视图的时间,提高效率: ```java private static class ViewHolder { TextView textView; } @Override public View getView(int position, View convertView, ViewGroup ...
然而,HorizontalListView是基于AdapterView的,它支持动态加载数据和复用视图(ViewHolder模式),性能更优,更适合大数据量的显示。 2. **HorizontalListView的实现原理** HorizontalListView的核心是重写了...
ViewHolder持有列表项视图的引用,避免了频繁的findViewById操作,从而提高了效率。首先,在ViewHolder类中声明并初始化视图的成员变量,然后在`getView()`方法中通过convertView参数查找ViewHolder,如果未找到,则...
在Android开发中,...它强调了适配器的正确使用、ViewHolder模式以及数据复用机制,这些都是Android开发中处理列表视图时不可或缺的知识点。通过学习和理解这些内容,开发者可以创建出更流畅、更内存友好的应用。
- **ViewHolder模式**:创建一个静态内部类ViewHolder,持有列表项视图的所有视图引用,避免每次`getView()`时查找视图,提高效率。 - **数据过滤**:在`getCount()`中根据需要返回有效数据的数量,避免加载无用...
- ViewHolder模式:减少findViewById()的调用,提高效率。 - 数据加载策略:分页加载,避免一次性加载过多数据导致内存压力。 - 高效滚动:合理使用`setScrollingCacheEnabled()`,开启/关闭滚动缓存。 - 自定义...
此外,合理使用缓存策略,如使用`LruCache`存储已创建的View,也可以提高效率。 总之,Android中的ListView是展示大量数据的重要工具,掌握其工作原理和优化技巧对于开发高效、流畅的Android应用至关重要。通过...
它解决了`ListView`和`Gridview`在处理大量数据时的性能瓶颈,通过视图复用机制(ViewHolder模式)显著提升了滚动性能。`RecyclerView.Adapter`用于绑定数据,`RecyclerView.ViewHolder`则用于缓存子项视图,减少 ...
1. 数据复用:类似于ListView的ViewHolder模式,通过缓存和重用视图,减少视图的创建和销毁,提高滚动流畅性。 2. 内存管理:避免一次性加载所有数据,而是采用懒加载策略,只在需要时加载可视区域内的数据。 3. ...
为了优化性能,我们还可以使用ViewHolder模式来缓存视图的引用,避免频繁的findViewById操作。同时,对于大量的子项,可以考虑使用DiffUtil来减少不必要的视图刷新。 总结来说,实现Android的分组ListView并支持...
ViewHolder模式是ListView优化的另一个关键策略,它将Item视图中的各个组件存储在一个静态类中,减少在`getView()`方法中的查找操作,提高性能。在上面的示例中,我们创建了一个名为`ViewHolder`的内部类,包含了...
- 使用`DiffUtil`计算列表变更,提高更新效率。 ### 7. 示例代码 在实际应用中,你可以参考以下示例代码来创建一个简单的`GridView`: ```xml <!-- layout/gridview.xml --> android:id="@+id/grid_view" ...