需要小部件实现建议

时间:2010-09-29 20:44:45

标签: android android-widget

我是Android新手,我想编写一个包含(大约)100列的小部件,每列包含不同数量的子视图(将在运行时通过一些服务调用确定)。用户可以水平和垂直滚动(与GridView类似的行为,但水平滚动)。子视图将是ImageButton等自定义小部件,当它们在屏幕上显示时,将用于通过服务调用加载图像和数据。

我实现了一个2D滚动视图,使用户可以垂直和水平滚动。我使用水平线性布局作为列的容器。但是,我在设计列时遇到了麻烦。我想过以下几种方式实施:

  1. 使用垂直线性布局作为列和ImageButton的子类作为子视图。具有挑战性的部分是如何仅在按钮变得可见时加载数据和图像以及如何在屏幕滚动后取消引用它们。据我所知,Android没有方法来判断小部件是否处于开/关屏幕(如onExpose()方法),所以我不确定是否可以(轻松)这样做。< / p>

  2. 使用某种排序AdapterView作为列。 ListView非常接近我正在尝试做的事情,但是每个列表视图都处理它自己的滚动,并且很难让所有列一起垂直滚动。我真的更喜欢使用适配器,因为它可以回收视图,这是非常可取的,因为我可能会有数以千计的子视图,而且我不确定我是否会耗尽内存。

  3. 我非常感谢更有经验的Android开发人员提供的有关如何实现上述内容的建议。

1 个答案:

答案 0 :(得分:1)

  

我不确定我是否会耗尽内存

除非您使用AdapterView技术,否则几乎可以保证您的内存不足。在许多手机上你只有16MB的堆空间,每个小部件需要1-3KB,而且位图需要很多内存。成千上万的这些=崩溃。

但是,我怀疑你的两种方法都不会起作用。如果您可以获得所需的行为,而不会耗尽内存,仅仅使用现成的小部件作为基础,我会感到非常震惊。

如果我必须实现这一点(并且想到 吓到了我),我首先尝试了解GridView实现的每一行。如你所说,你想要的是二维滚动GridView。因此,了解GridView,然后找出如何添加水平滚动。从理论上讲,这可能是GridView的一个子类,但我对此表示怀疑。更有可能的是,它需要是AdapterView或可能AbsListViewGridView的直接父级)的自定义子类。

为了将努力程度放在透视中,GridView长度为1879行(包括注释和空格)。 AbsListView - 如果你需要为水平滚动重新实现 - 是4200行。

相关问题