【问题标题】:How to resize a ListView when new rows are added?添加新行时如何调整 ListView 的大小?
【发布时间】:2023-03-23 16:46:02
【问题描述】:

所以我有这个:

...<!--Stuff above-->
<ListView 
     android:id="@+id/reminders_list"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"></ListView>
...<!--More stuff below-->

我的问题是当我尝试添加更多行时它不起作用,因为如果没有更多空间,适配器不会添加更多视图。至少在这种情况下。这意味着我需要动态调整它的大小。问题是如何做到这一点?如果除了调整大小之外还有其他可能,我宁愿这样做。提前致谢。

【问题讨论】:

  • 您可以使用自定义列表适配器并将元素列表传递给它。
  • 嗯,其实我从来没想过。让我试试。我会尽快回复你
  • 使用自定义适配器类并通过 BaseAdapter 扩展它,您将获得 4 个函数,其中一个是 getCount(),传递您想要的值
  • @AkashG 这实际上正是我正在使用的。但我遇到的问题正是因为这个。当 ListView 下没有任何内容时,这不是问题。但显然,当有东西时,它不会调整它的大小。更糟糕的是,由于没有空间,尝试添加另一行不起作用。所以 ListViews 滚动功能也没用。不知道为什么会这样,但那是我的经验。
  • 查看列表视图的大小无法修复。让我知道你在适配器中传递了什么?

标签: android resize android-listview


【解决方案1】:

问题在于您的android:layout_height="wrap_content"

将高度设置为 wrap_content 将仅显示前三行,其余行将被忽略。尝试将其设为android:layout_height="fill_parent"

正如Romain Guy(谷歌工程师曾在UI工具包上工作)在他的帖子中所说的

通过将宽度设置为 wrap_content,您是在告诉 ListView 与最宽的子视图一样宽。因此,ListView 必须测量其项目并获取它必须在适配器上调用 getView() 的项目。这可能会发生多次,具体取决于布局传递的数量、父布局的行为等。

因此,如果您将 ListView 的布局宽度或布局高度设置为 wrap_content,ListView 将尝试测量附加到它的每个视图 - 这绝对不是您想要的。

记住:避免在任何时候都为 ListViews 或 GridViews 设置 wrap_content,有关更多详细信息,请参阅Google I/O video 谈论 listview 的世界

Dynamically Adding rows to List View Link_1

Dynamically Adding rows to List View Link_2

Dynamically Adding rows to List View Link_3

Dynamically Adding rows to List View Link_4

【讨论】:

  • 我做了match_parent 因为fill_parent 已被弃用,但它不起作用。同样的问题。就像它是一个奇怪的东西。发生的事情是我有一个包含 1 行的初始列表。这设置了大小。当我单击以添加另一行时,它会因为没有空间而失败。我认为它只是适合它,但它不这样做。知道为什么会这样吗?!哈哈。但是谢谢你的视频。一定会看的。也许这有一些答案
  • 添加后是否检查了适配器大小,以便您知道只有视图没有来或数据本身没有添加
  • 其实我知道。我不知道大小,但我在它运行时正在记录,它只是完全忽略了另一行的添加。它会运行并替换位置 0 中的任何内容,因此它会运行,只是不会在位置 1 上添加任何内容。但是当您实际设置高度时,比如说80dp,然后做同样的事情,位置 0 和 1 可以是见过,但不是位置 2。从那次反复试验中,我收集到 ListView 不会添加更多行,除了它在初始创建时已经有空间。
  • 如果您的数据量较少,为什么不使用动态创建表格布局或一些滚动视图..
  • 嗯,你是对的!感谢这一切。非常感谢。我会就我选择的其他事情回复你。
【解决方案2】:

当向 List Adapter 添加元素时,您需要调用它的notifyDataSetChanged() 成员函数来通知任何附加的观察者(例如 ListView),数据已更改,并将导致其刷新。

【讨论】:

    猜你喜欢
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    相关资源
    最近更新 更多