0

我有一个动态创建的项目列表,应根据包含文本所需的空间显示在两列或一列中,例如,如果文本很长,则每行只有一个项目,否则为两个。显然它们都应该是相同的尺寸(屏幕尺寸的一半)。

据我所知,Adapter 没有标准的 Android 视图可以做到这一点。使用 GridView,您可以有多个列,但不能有一些行一列而其他两列。TableLayout 可以拉伸视图,但在这里你必须知道每行需要多少列。另外它没有适配器。

所以我想知道a)我是否缺少任何支持此类功能的控件或b)解决此问题的最简单方法是什么?

编辑:这些项目还包含一个复选框,我需要跟踪选中状态,所以我不能只使用适配器将两个项目放在一个视图中。

4

2 回答 2

1

我想说这是一个很难使用标准组件解决的问题,因为将数据映射到项目到行的问题。

例如,如果您使用Cursorwith xrows 向适配器提供数据,那么从 中看到的项目总数Adapter也是x. 但是,由于您有条件地将两个项目映射到同一行,这意味着 aListView将看到, wherey中的行。但是你不能轻易地从一开始就知道会是什么。此外,如果询问0 <= i < y 的项目 i,则没有(简单的)方法可以确定将映射到的元素。Adaptery <= xyListViewAdapterAdapterCursori

话虽如此,一个可行的解决方案是子类化AdapterViewListView自己实现元素的布局。当您从 中获取每个项目时Adapter,您将根据周围适配器项目的大小对其进行测量和布局。

如果您没有大量元素,可以为您工作的另一种解决方案是使用两个 custom Adapter,一个称为ItemAdapter,一个称为RowAdapter。将ItemAdapter根据(假定的)对实际项目进行膨胀Cursor。将RowAdapter使用ItemAdapter来获取项目并将它们合并到行中。将ListView反过来使用RowAdapter. 问题是要知道将产生多少行RowAdapter,有必要在ItemAdapter连接RowAdapterListView.

于 2011-12-09T14:25:45.603 回答
0

据我所知,您的问题没有现成的解决方案。我还没有尝试过这样的事情,但我会使用 LinearLayout 作为列表项。然后只需创建您自己的 Deflater(例如 CursorAdapter)来对 Layout 进行放气并检查长度。如果需要,您应该能够将新视图(例如 TextView)添加到 LinearLayout。

于 2011-12-09T11:42:27.543 回答