0

SearchFieldDemo对我来说效果很好,但有一个问题:当您通过菜单将新国家/地区添加到 KeywordFilterList 并且该新项目位于排序列表的底部时,用户看不到任何内容并且不确定是否是否添加了新项目。

一个解决方案是让 KeywordFilterList 滚动到新项目,但我不知道该怎么做。我试过了:

void addElementToList(Country country)
{       
    _countryList.addElement(country);
    _keywordFilterField.updateList();

    int index = _countryList.getIndex(country);
    System.err.println("XXX index: " + index);
    _keywordFilterField.setSelectedIndex(index);
}   

但这没有任何效果:打印的索引是正确的,并且 KeywordFilterList 会滚动,但不会滚动到正确的位置。

请问有什么想法吗?亚历克斯

4

1 回答 1

0

在示例应用程序中,您可能已经注意到该_keywordFilterField.setKeyword("");行是他们在将新项目添加到列表之前所做的第一件事。这是为了保证新项目将在列表中可见。否则,应用了某些过滤器后,列表可能不会显示新项目。

因此,在您的代码中,您似乎没有处理这一点。因此,您获得的索引int index = _countryList.getIndex(country);可能与某些当前关键字列表过滤的可见索引中的索引不同。顺便说一句,要在可见列表中查找索引,您可以使用ReadableListwhich can be got with _keywordFilterField.getResultList()

所以工作流程可能如下:

  1. 重置关键字_keywordFilterField.setKeyword("");- 现在没有应用过滤,因此可见列表应该包含一个新项目。
  2. 将新项目添加到基础集合 -_countryList.addElement(country);
  3. 调用_keywordFilterField.updateList();以刷新 ListField。
  4. 为了安全起见,使用调用获得的集合找到要滚动到的索引_keywordFilterField.getResultList()
  5. 选择新项目_keywordFilterField.setSelectedIndex(index);
于 2011-04-08T18:35:06.503 回答