在设计某个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,下面只是给出转载的部分内容,其中说明了我遇到的问题,其产生的原因。

     

2、 此问题在于,ListView没有取到实际的高度,无法确定取多少View来填充ListView,也就是运行getView()的具体运行次数。  3、 应该把listiview在布局文件中的高度设置为:fill_parent
      虽然,文中描述问题的现象与我遇到的有些差异,但是两次和多次只不过是表象。据此,对我的代码进行了修改和测试,问题得到解决。

更多相关文章

  1. Android笔记---四大组件之Content Provider内容提供者详解
  2. Unreal Engine 4,安装CodeWorksforAndroid时,下载组件失败的解决方
  3. Android(安卓)6.0(API 23)及以上动态权限申请的方法
  4. Android(安卓)使用 DownloadManager 管理系统下载任务的方法
  5. Android(安卓)常见面试题
  6. JNI笔记 : 数据类型、JNI函数与签名
  7. frida进阶-Android逆向之旅---Hook神器家族的Frida工具使用详解
  8. (zz)android HAL实例解析
  9. android几种定时器机制及区别【转载】

随机推荐

  1. Android启动时动态加载权限
  2. Android开发之布局简介(1)
  3. Android下的BLE编程遇到的一些BUG
  4. Android(安卓)UI编程(2)——多级列表(Exp
  5. Cocos2d-x的Android配置以及相关参考文档
  6. [android]导出apk报错 Conversion to Dal
  7. Android编程之关闭当前程序
  8. 利用adb 在macOS上 为Nexus Android(安卓
  9. Android(安卓)Fragment 基本介绍
  10. Android学习笔记(十七)——使用意图调用内