当前位置: 首页 > 面试题库 >

从适配器内部处理多个getView调用的最佳方法

勾学博
2023-03-14
问题内容

我有一个ListView风俗习惯ArrayAdapter。此行中的每一行ListView都有一个图标和一些文本。这些图标在后台下载,缓存并使用回调(分别替换为)进行下载ImageViews。每次getView()运行都会触发从缓存或下载中获取缩略图的逻辑。

现在,根据Romain Guy所说:

“绝对不能保证getView()的调用顺序和次数。

我已经看到这种情况的发生,因为大小为2的一行getView()被调用了6次!

如何更改代码以避免重复的缩略图获取请求并处理视图回收?

谢谢。


问题答案:

从API。

public abstract View   getView  (int position, View  convertView, 
                                 ViewGroup  parent)

convertView-尽可能重用的旧视图。注意:使用前,应检查此视图是否为非null并具有适当的类型。如果无法转换此视图以显示正确的数据,则此方法可以创建一个新视图。

因此,如果已经为该特定索引调用了getView,则convertView将是该第一次调用返回的View对象。

您可以做类似的事情。

if(!(convertView instanceof ImageView)){
   convertView = new ImageView();
   //get image from whereever
} else {} // ImageView already created


 类似资料:
  • 问题内容: 我的片段中有一个方法。此方法启动一个新的活动。我想从我的调用此方法。 这是我的代码: HomeFragment.java StaggeredAdapter.java 我该怎么做? 问题答案: 编辑: 这是我现在要使用的。下面提供了较旧的“更轻松”的解决方案。 现在,可以从适配器中的任何位置调用该片段中的方法。 而且,除了通过构造函数提供侦听器之外,我们还可以在适配器中添加另一个方法,例

  • 问题内容: 我有一个自定义列表适配器: 在重写的“ getView”方法中,我执行打印以检查位置是什么,以及它是否是convertView: 其输出(第一次显示列表时,尚无用户输入) AFAIK,尽管我找不到明确说明的内容,但getView()仅用于可见行。由于我的应用以四个可见行开头,因此至少位置编号从0-3循环是有意义的。但是剩下的就是一团糟: 为什么每次对getview调用三遍? 当我还没有

  • 问题内容: 使用这样的函数: 我在输出中看到了print_trace的详细信息。 还有什么其他方法可以做到? 问题答案: 您在我的另一个答案(现已删除)中提到,您还希望查看行号。从应用程序内部调用gdb时,我不确定该怎么做。 但是,我将与您分享几种 不使用gdb 即可打印具有函数名称及其相应行号的简单stacktrace的方法。其中大多数来自Linux Journal的 一篇 非常好的 文章: 方

  • 但问题是我想知道如何从类中的片段调用方法?这是我的代码 下面是在活动中工作但在片段中不工作的代码

  • 问题内容: 我有一个自定义列表适配器: 在重写的“ getView”方法中,我执行打印以检查位置是什么,以及它是否是convertView: 其输出(第一次显示列表时,尚无用户输入) AFAIK,尽管我找不到明确说明的内容,但getView()仅用于可见行。由于我的应用以四个可见行开头,因此至少位置编号从0-3循环是有意义的。但是剩下的就是一团糟: 为什么每次对getview调用三次? 当我还没有

  • 问题内容: 我正在开发Web应用程序。用户可以在一个地方使用HTTP协议上传文件。在经典HTML文件上传控件和Java小程序之间可以选择上传文件。 经典的HTML文件上传效果不好,因为您一次只能选择一个文件,并且在实际上传过程中很难获得任何进度指示(我最终使用计时器刷新了进度指示器,并从服务器通过AJAX调用)。优点:始终有效。 随着Java小程序,我可以做更多的事情:选择多个文件一次(甚至一个文