java - BlackBerry - 如何通过包含自定义管理器的 VerticalFieldManager 改进此搜索功能

标签 java blackberry

我有一个带有 VerticalFieldManager 的屏幕 用于保存自定义管理器列表。

屏幕还包含一个编辑字段 充当搜索字段,因此当用户 输入一些文本,我的应用程序在数组上循环 自定义管理器并将输入的文本与来自的文本进行比较 阵列中的每个经理。

如果经理的文本匹配 输入的字符串,我将该自定义管理器附加到 垂直字段管理器。

这些是我的代码的相关部分:

EditField _editField;
TempBeanPlaces [] _placesList;
VerticalFieldManager _vfmCellPlaces;

...

这是TemBeanPlaces 的构造函数:

public TempBeanPlaces(String pPlaceName, 
    CellPlaceManager pCellPlaceManager) {
        placeName = pPlaceName;
        cellPlaceManager = pCellPlaceManager;
}

...

此代码处理搜索:

_editField.setChangeListener(new FieldChangeListener() {            
    public void fieldChanged(Field field, int context) {
        String text = _editField.getText().toLowerCase();
        _vfmCellPlaces.deleteAll();
        for (int i = 0; i < _placesList.length; i++) {
            TempBeanPlaces tempBeanPlaces = _placesList[i];
            if(tempBeanPlaces.getPlaceName().toLowerCase().indexOf(text) != -1) {
                _vfmCellPlaces.add(tempBeanPlaces.getCellPlaceManager());
            }
        }
        updateLayout();
    }
});

当数组 _placesList 不太大(例如长度为 50)时,这可以正常工作, 否则应用程序会变得太慢。

How could I optimize my code for large amounts of custom managers?. For example, in case the array contains 600 elements.

我真的需要改进这个功能。我刚刚读到有关 BlackBerry 中的 ListField 的内容, 但既然我已经完成了这段代码,也许我不需要用 ListFields 重写所有内容。

提前致谢!

最佳答案

在 BB 论坛上回答了类似的问题:

How-to-improve-this-search-feature-over-a-VerticalFieldManager

我会考虑三个可行的选择:

  1. 使用 addAll() 一次添加所有管理器,这样显着 减少布局时间
  2. 使用“分页”,因此您只需添加前 15 个,然后再添加 如果用户也希望您进行选择
  3. 使用列表字段

前 2 个选项将使您能够保留当前的管理器代码。

按照给定的顺序尝试这些选项,并让我们知道哪一个适合您。

更新

鉴于选项 1 对您不起作用,并且不允许您执行选项 2,那么也许我可以建议选项 1.5。仅添加前 25 个左右,但添加一些滚动控件来检测您何时接近 VFM 的末尾,以及当您在 1 个屏幕内时,它会添加更多内容。这将导致此时出现滚动故障,但列表将看起来连续,而不会在开始时出现巨大的点击。

我认为没有人会滚动浏览 600 个条目。如果您的搜索显示找到的数字,这将为您的用户提供指示,如果数字太大,他们可能会尝试不同的搜索。而且由于您没有添加每一个项目,因此您显着加快了该过程。

对此的一种变体是,直到用户将焦点从 EditField 移到列表上才添加所有条目。

您可以考虑在线程中异步完成此“搜索”过程的另一件事,并在用户使用一些新输入更新编辑字段时取消它。

或者,如果选项 1 不适合您,我可以建议您尝试最多添加 10 个,然后看看故障是否仍然存在。如果是这样,那么我怀疑您的字段处理存在问题,例如某些绘制循环或布局循环。将此与添加 10 个 LabelField 所需的时间进行比较。也许我们可以优化您的自定义管理器中的处理来克服这个问题。

进一步编辑

我突然想到,也许限制 VFM 的高度可能会限制所完成的绘画。不正确,我已经测试过,唯一绘制的字段是那些可见的字段。因此,性能受到影响的是布局而不是油漆。

关于java - BlackBerry - 如何通过包含自定义管理器的 VerticalFieldManager 改进此搜索功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19979640/

相关文章:

java - 需要递归地从文本文件中打印老板姓名

java - 在 Blackberry 应用程序中集成 Post Web 服务

BlackBerry - 当 UI 应用程序未打开时,如何在后台线程中访问数据库(或创建 HTTP 连接)

java - HttpResponse 代码 302

java - Facebook Java 服务器

Java 事件监听器(鼠标和键盘)

Java - 简单游戏的设计建议

java - 我如何使用/* servlet 映射发送到 WEB-INF?

java - Selenium WebDriver 无法定位 Selenium IDE 可以定位的 Element

blackberry - 是否可以在 blackberry OS 6,7 和 7.1 中运行 blackberry OS 10