【问题标题】:Blackberry - prevent ListField from scrolling after removing an item黑莓 - 删除项目后防止 ListField 滚动
【发布时间】:2012-04-16 16:00:57
【问题描述】:

我有一个 ListField,它是一个很长的垂直列表,您可以选择和删除。删除项目后,列表会滚动回顶部。我可以使用 setSelectedIndex(rowIndex) 返回到我一直在查看的列表中的位置,但这不会保留我一直在屏幕上查看的行。相反,该行显示在屏幕底部,因为一旦正确的索引出现在屏幕上,它就会停止滚动。

有没有办法可以删除一行并保留我的列表视图/位置?

【问题讨论】:

    标签: blackberry scroll listfield


    【解决方案1】:

    刚刚意识到我使用了错误的 ListField.setSize() 函数。

    ListField.setSize(int size) 将焦点发送回列表顶部,但如果需要,您可以使用 ListField.setSize(int size, int focusRow) 将焦点留在“currentIndex”。 希望这可以帮助某人

    【讨论】:

      【解决方案2】:
      1. 保存列表中的当前位置(通过myListField.getSelectedIndex()),让我们说

        int myVar = myListField.getSelectedIndex();

      2. 删除项目

      3. 使用myVar,并使用当前列表大小和myVar 值通过myListField.setSelectedIndex(int index); 计算和设置列表索引使用另一个线程和Application.invokeLater(Runnable thread); 执行此操作,以避免在更新您的UI 时出现事件锁定问题申请。

      就是这样。

      【讨论】:

      • 这会将焦点转移到正确的行,但屏幕上显示的行仍然会有所不同。例如,我正在查看第 5-10 行,但在 removeRow(8) 之后,setSelectedIndex(8) 将屏幕带到第 3-8 行
      • 我没有明白你的意思。如果您希望将焦点设置到特定对象,请在删除行后在列表中找到该对象,然后将焦点设置为找到的列表索引。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多