- 浏览: 320127 次
- 性别:
- 来自: 广州
-
文章分类
- 全部博客 (107)
- Linux (16)
- Android (20)
- Network Pay (0)
- UI (8)
- Program Language (13)
- Java (8)
- Web Design (3)
- Database (5)
- SQLite (2)
- Vi/Vim (4)
- CSS (2)
- Network (3)
- PHP (20)
- Web Service (3)
- Troubleshooting (37)
- MySQL (3)
- System Management (3)
- Tools (27)
- Others (7)
- Eclipse (3)
- Framework (5)
- Python (1)
- JavaScript (1)
- Git (1)
- SCM (1)
- Video (0)
- Testing (0)
- Windows (1)
- http://service.oray.com/question/116.html (1)
- Python Troubleshooting (1)
最新评论
-
xwv:
能对你有启发和帮助就好
为什么Android的Adapter中,bindview被调用了多次 -
lipei.98:
哈哈 谢谢你的博客,解决了我一个头痛的问题。
为什么Android的Adapter中,bindview被调用了多次
在设计某个Activity时,界面使用了ListView,其相应的Adapter中,实现了方法newView()和bindView()。
在测试时发现,放置在方法bindiew()中的Log输出,在每个ListView item的生成时,均被调用了两次,这与设计的意图是不符合的。
通过Google,首先找到了下面这个帖子:
android中CursorAdapter的bindview调用
提问者huaping100的问题描述与我遇到的是非常相似,下面是其问题描述的部分内容:
由于自己写了一个CustomAdapter来继承CursorAdapter,要重写bindView和newView方法。
当一个ListActivity的启动时,onCreate方法中会setListAdapter为CustomAdapter。
当我打Log的时候发现每一个Item中bindView方法被调用了两次。也就是说,如果你有3个Item在List中,bindView就被调用了6次。
我想问一下CursorAdapter的bindView方法在什么时候被调用,为什么一个Item要调用两次bindView来显示?
本贴中的讨论,对提问者huaping100的问题没有给出有效的解决方法,但让我对Android中的Adapter的使用,主要是关于方法getiew(),newView()和bindView(),有更多了解的基础。
本贴中,回答者ReV_Fycd,提供了一个web链接:
GetView Vs. BindView in a custom CursorAdapter?
回答者CommonsWare对提问者的回答中,简明给出了getiew(),newView()和bindView()的关系,同时提到了两个有用的关键点。一个是:the row recycling pattern,这是和ListView的工作机制有关;一个是:the ViewHolder pattern,这是Adapter实现中的一种有效率的方式。
因为感觉要解决遇到的问题,需要先对ListView和Adapter的工作基础有更多的理解,因此Google了和“the row recycling pattern“有关的东西,找到了下面的blog:
[Android] ListView中getView的原理+如何在ListView中放置多个item
此blog的内容是对下面web的翻译:
HowTo: ListView, Adapter, getView and different list items’ layouts in one ListView
文中,给出了对row recycling pattern的说明,同时在示例代码中也演示了ViewHolder pattern的设计实现。
到此,了解了许多东西,虽然遇到的问题没有得到有效的解决,但是确定了一点,即问题的产生,来自对方法getView()的调用。依照这个想法,Google了关键词:Adapter,getView,多次执行。
找到了下面的blog:
自定义adapter 的getView方法被重复执行了n次的解决方法
此blog中转载另一个web,下面只是给出转载的部分内容,其中说明了我遇到的问题,其产生的原因。
发表评论
-
在Android项目中使用库项目的一些参考资料
2013-02-17 14:23 01.使用库项目实现Android程序代码的复用 2.An ... -
在Samsung Galaxy S3 GT-I9300获取root权限
2012-10-26 18:23 2532如题,怎么做? 之前在一部And ... -
Android中使用XML
2012-10-11 17:03 0在 Android 应用程序中使用 Internet 数据: ... -
关于Android中ImageView的ScaleType
2012-09-12 12:28 3507对于Android的widget: ImageVi ... -
Android应用中实现一个软件启动的欢迎界面
2012-07-31 21:03 3743在一个Android应用启动时,可以根据需要为其设 ... -
给Android手机设置的壁纸应该是多大尺寸
2012-07-30 18:15 7758如果在Android手机中设置一个新的壁纸,那么这 ... -
【转】各种浏览器的页面渲染引擎简介
2012-07-12 15:42 923一直对各种浏览的页面渲染引擎不是很清楚,今天看到一 ... -
【转】一篇关于工具tcpdump使用的文章
2012-05-29 18:17 911因为测试需要,在Android手机中使用了工具tc ... -
apache的htttpget对url长度的限制
2012-05-29 11:45 0Get方法提交URL的最大长度限制 http://s ... -
升级Android ADT后,为何编译项目未能生成apk文件
2012-05-29 11:26 3136最近升级了Android SDK Tools,Pl ... -
关于Android中的uses-permission和uses-feature
2012-04-25 15:26 2603前些天,看到一篇blog: ... -
Android设计中和“singleTask“有关的一个设计问题
2012-04-23 16:16 3893在Android设计中 ... -
Android的log里这代表什么:Activity idle timeout for HistoryRecord
2012-04-16 12:26 13300测试Android程序时,在logcat中见到类似 ... -
两篇关于Android App Widgets 的文章
2012-04-13 16:24 1084在开发中遇到和Android App Widget ... -
如何在没有内置Google Map APIs的Android手机上安装程序
2012-04-01 11:20 2249在没有内置Googl ... -
如何直接下载Google为Android开发中提供的packages
2012-04-01 09:29 1434之前遇到过一个问题,想直接通过某个URL下载了早期 ... -
【转】Android 中SQLite事务处理的简单例子
2012-03-28 12:20 2365需要在Android 中进行SQLite事务处理, ... -
如何在Android手机中批量建立联系人数据
2012-03-22 14:54 2854因为测试需要,欲在Android手机中批量建立联系 ... -
Android程序运行时获取版本名称(versionName)
2012-03-16 15:14 6259问题起因:想在Android程序运行时,获取And ... -
Android中WebView显示HTML页面时右侧的空白
2012-03-08 11:12 6001在Android中使用WebView显示HTML页 ...
相关推荐
将Item视图中的子视图缓存为成员变量,减少findViewById()的调用次数。 3. **自定义ListView** - **自定义Adapter**:除了继承BaseAdapter,还可以实现`CursorAdapter`(用于数据库查询结果)或`SimpleAdapter`...
- `ConversationListAdapter`的`bindView`和`newView`方法用于在ListView中创建和重用item,而`onMovedToScrapHeap`方法是由于ListView的缓存机制,确保不再使用的item可以被回收。 4. **数据与UI的映射**: - 在...
在Android中,常用的Adapter有ArrayAdapter、SimpleAdapter和CursorAdapter等。Adapter会根据数据源生成ListView中的每一项View。 2. **自定义ListView项** 为了使ListView具有丰富的展示效果,我们常常需要自定义...
- **@BindString**: 绑定字符串资源,避免多次使用getString()。 **注意事项** - 使用ButterKnife时,记得在每个使用它的组件的onCreate()方法中调用`ButterKnife.bind()`方法进行初始化。 - ButterKnife不支持匿名...
在Android开发中,ListView是经常被用到的一个组件,用于展示大量的数据列表。然而,随着应用功能的复杂化,我们常常需要一个更灵活、可动态调整的ListView,这就是DynamicListView的由来。本文将深入探讨...
- `@BindViews`:如果需要一次性绑定多个相同类型的视图,可以使用此注解。它会将所有匹配ID的视图放入一个List中。 ```java @BindViews({R.id.view1, R.id.view2, R.id.view3}) List<View> views; ``` 3. **事件...