【问题标题】:Android: Is this just a custom ListView?Android:这只是一个自定义的 ListView 吗?
【发布时间】:2012-10-29 20:39:28
【问题描述】:

Four Square android 应用中的 Feed 如下所示:

一个带有实际帖子的矩形框,下面是一个文本,例如 10 people like this 等等。

这只是一个列表视图,其实际内容具有边距和不同的背景,以及它下面的 TextViews。

因为当我有一个带有 ImageView 和 5-6 个 TextView 的复杂 ListView 时,加载 UI 需要花费大量时间。

我的一位在 iO 上工作的朋友说 不要使用自定义 ListView 项目,而是使用 ImageView,它看起来像带有图像和文本视图的自定义视图。这使得加载速度更快。但是当然要实现这样的东西需要很多。

我只是想知道,如果它只是另一个自定义列表视图?

我延迟加载 UI 是因为其他原因吗?

android 也有这种技术??

谢谢

【问题讨论】:

  • 这是一个普通的ListView。魔术发生在适配器上,所有视图都以编程方式膨胀,而不是通过 XML 膨胀。他们接受响应并以一种或另一种方式膨胀它,具体取决于响应的类型。

标签: android listview


【解决方案1】:

可能是具有复杂子视图的ListView。也可以是ExpandableListView

它的加载速度可能比您以前使用的更快,这有几个原因:

  1. 图像可能已经缓存在文件系统上,因此它从本地存储加载而不是下载图像。
  2. 图像的尺寸已经正确,因此无需调整大小。
  3. 图像加载是在后台线程上完成的,以便在将图像加载到内存时不会滞后 UI。

【讨论】:

  • 它绝对不是 ExpandableListView。单击项目或子项打开不同的屏幕
  • 你可以强制它默认展开。您也可以强制它,使其无法关闭。虽然我会说,如果您在普通的 ole ListView 上使用 ExpandableListView,我看不出性能会有什么影响。
  • @Archie.bpgc 我添加了一些可能的解释,说明为什么它的加载速度可能比您在自己的项目中所经历的要快。
【解决方案2】:

您可以在 Adapter.getView() 中为每个 ListView 项展开复杂布局,并根据您要呈现的项的对象在不需要的视图上删除 (View.setVisibility(View.Gone))。

如果您想重用展开后的布局,请不要忘记再次将所有内容的可见性设置为 View.VISIBLE。

我已经在我的代码中这样做了:

        if (post.getImageURL() != null && !post.getImageURL().isEmpty()) {
            holder.image.setVisibility(View.VISIBLE);
            holder.image.setScaleType(ScaleType.FIT_CENTER);

            displayImage(post.getImageURL(), holder.image);
        } else {
            holder.image.setVisibility(View.GONE);
        }

在这种情况下,我隐藏了一个可选图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-23
    • 2012-06-01
    • 2011-09-12
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    相关资源
    最近更新 更多