如何在黑莓中创建可扩展的列表视图

时间:2013-09-17 08:39:34

标签: user-interface blackberry expandablelistview

我搜索了很多,但没有为Blackberry中的Expandable listview找到单个链接,我知道如何在Android中创建可扩展列表,如果有人对Blackberry Expandable listview有所了解,请帮助我。

enter image description here

2 个答案:

答案 0 :(得分:5)

在BB上创建List的标准方法是使用ListField类。这个类非常有效,但有一些缺点

  • 所有行必须是相同的高度
  • 所有行必须在显示屏上连续

这使得使用此类很难复制Android ExpandingListView。

要在BlackBerry设备上复制此外观,我建议使用一系列VerticalFieldManagers(VFM)。对整个列表使用一个,并为每个可扩展项添加另一个。如果项目已展开,请将子列表条目添加到关联的VFM,如果未展开,则删除子条目。

这种方法可以正常工作 - 如果显示的字段数量很大,添加和删除字段会显着降低BB设备的速度。所以,如果你有,在列表中说20个项目,那就没关系了。如果你有2000,当你展开和收缩列表时,它会显着减慢设备的速度(添加和删除子列表项)。

您可以通过使列表项(父级和子级)尽可能高效来提高此性能。我建议您查看用于ListStyleButtonField的代码,您可以在此处找到它:http://supportforums.blackberry.com/t5/Java-Development/Implement-advanced-buttons-fields-and-managers/ta-p/488276

<强>更新

只是想澄清为什么ListField无法直接工作,以及可能的解决方法。

ListField的问题是每一行都有一个特定的高度。要显示子元素,您需要扩展父项的高度以包含子项,这是您无法做到的。所以你不能只是更新被调用的返回绘制方法(在ListField中称为drawListRow(..))来实现这种外观。另一个问题是,ListField上的一个列表项被聚焦为一个单独的实体,我假设您希望单独选择子项。

相反,在展开时,您可以添加其他行,从而有效地将子项插入要绘制的列表中。您必须使用标志添加这些行,以便drawListRow(..)方法知道将这些行绘制为子项。反向删除。请注意,子项必须与其他所有项高度相同。

尝试了两者后,我发现VFM方法更易于管理。我只考虑列表大到足以影响性能的ListField方法。当它那么大时,谁会滚动浏览BB上的那些条目?如果你达到那个数字,那么分页机制似乎更加用户友好。

答案 1 :(得分:2)

如果您指的是BlackBerry Java SDK,请查看TreeField类。

<强>更新

在这种情况下,ListField将是最合适的选择。根据您的需要实现ListFieldCallback并将其附加到ListField实例。当用户单击“可扩展”列表项时,只需在ListFieldCallback中处理此事件并重新绘制列表实例。关于使用ListField类,这里是the tutorial