gpt4 book ai didi

android - 在更改元素的可见性时更新布局高度

转载 作者:行者123 更新时间:2023-11-30 03:31:41 26 4
gpt4 key购买 nike

在我的布局中,我有两个 ListView 一个接一个地放置在一个垂直的 LinearLayout 中,如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:orientation="vertical"
android:layout_height="fill_parent">
<ListView android:id="@+id/events_list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<ListView android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>

我想为第一个 ListView 中的每个元素实现 onItemClick 事件,这将展开每一行以显示附加信息。

为了实现这一点,我决定在初始适配器 getView 函数中添加所有元素,但其中一些具有“View.GONE”可见性,然后在单击时将它们的可见性更改为可见。

问题是list元素的初始高度没有展开,只是增加了滚动

我知道 ExpandableListView,但我从未使用过它,我不知道它是否是这个非常简单的案例的正确解决方案。


我添加到第一个 ListView 的元素布局的摘录(可能有用):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:orientation="horizontal"
android:layout_height="wrap_content">
...
</LinealLayout>

最佳答案

根据您的描述,我认为您需要使用可扩展的 ListView 。由于 ListView 的工作方式,更新列表中的个别项目很痛苦。 ListView 最初只会创建填满屏幕所需的 View ,然后在用户滚动列表时回收这些 View 。当然,您可以更改这些值 - 例如更新文本字段和图片 - 但它自己的 View 并不是每次都重新膨胀,只是子元素的内容发生了变化。这可能就是为什么高度不会改变的原因。适配器正在显示新的 subview ,但在原始膨胀列表项的高度内显示。

我能想到的一个方法是使用 View.INVISIBLE 而不是 View.GONE 来实现它。通过这种方式,您可以膨胀显示所有元素所需高度的 View ,并在有人点击时显示/隐藏。问题是这不会达到您正在寻找的扩展/收缩状态。再加上它会有大量丑陋的白色空间来隐藏东西。

也就是说,我不知道将所有这些 View 元素设置为消失是个好主意。 ExpandableListView 的设计使您可以拥有常规 View 并在点击时展开不同的 View 。这比为每个 View 解析可能的 XML 元素然后尝试显示/隐藏不同的字段 onClick 要高效得多。考虑使用此方法。它并不比常规 ListView 难多少,而且会更适合您要做的事情。

关于android - 在更改元素的可见性时更新布局高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17343603/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com