当GridView子项的可见性被设置为Gone时,如何重新排列?

5

我通过将子项的可见性设置为View.GONE来隐藏GridView中的一个子项。问题是,即使我将它设置为GONE,它仍然会消失,但在它原本所在的位置上仍然留下了空隙。

是否有可能重新排列GridView,使隐藏的元素不占用布局中的任何空间?

<GridView
    android:id="@+activity_queues/gv_queue1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnWidth="200dp"
    android:horizontalSpacing="10dp"
    android:numColumns="auto_fit"
    android:padding="10dp"
    android:stretchMode="none"
    android:verticalSpacing="10dp" >
</GridView>

1
GridView 的情况下,即使它是不可见的,它仍然占据了网格的一个“单元格”。因此,即使元素本身不占用任何空间,父单元格仍然占用该空间。您可能需要完全删除该单元格(保存它,以备将来重用)。 - Cat
3个回答

2
要从GridView中移除单个项目,您需要从Adapter或GridView的数据源中删除它。正如您已经发现的那样,更改单元格的可见性不会重新排列您的布局,它只会显示该项目的空白单元格。

我猜没有别的办法了。谢谢你。我会把你的答案标记为正确的。 - kaneda

0

我自己也在这个问题上苦苦挣扎。奇怪的是,文档中提供了完全相同的场景,但在尝试后却不起作用:

https://developer.android.com/reference/android/widget/GridLayout.html

它说明:
为了布局目的,GridLayout将其可见性状态为GONE的视图视为具有零宽度和高度。这与完全忽略标记为GONE的视图的策略略有不同。例如,如果一个标记为gone的视图独自在一列中,则仅当视图上没有定义重力时,该列本身才会折叠为零宽度。如果定义了重力,则gone标记的视图对布局没有影响,容器应按照未添加该视图的方式进行布局。在分配多余空间期间,GONE视图被视为具有零权重。
这些语句同样适用于行以及列,以及行或列组。
有人找到更好的解决方案了吗?

-1

GONE 应该完全移除它,根据文档和我的经验,它不再占用任何空间。所以,如果它还在占用空间,那么可能是由于上下方的元素填充或边距造成的 GridView?


1
有时候最好先测试一下你的答案。创建一个GridView,使用OnItemClickListener将每个点击的项目的可见性设置为GONE,你会发现问题不是填充或边距。 - Sam
刚刚尝试了一下,无论是使用设置为Gone的GridView还是不使用它,我的用户界面都没有任何变化。 耸肩 - Kaediil
1
你是将整个GridView设置为GONE了吗?作者询问的是网格中的单个子项。 - Sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接