【问题标题】:Rebuild list of containers without scrolling the list无需滚动列表即可重建容器列表
【发布时间】:2016-09-24 21:54:29
【问题描述】:

我的应用显示了很长的容器列表,当用户编辑其中一个内容时,必须刷新整个列表,因为其他容器中的内容可能会发生变化(它们也可能会改变大小)。

目前我只是通过getContentPane().removeAll() 执行此操作,然后重新计算所有容器,然后revalidate() 以显示更新后的表单。但是,当我这样做时,列表会滚动回顶部。

我怎样才能在列表中保持相同的滚动位置,例如,刚刚编辑的容器的新实例与以前一样在屏幕上保持相同的位置?我知道scrollComponentToVisible(Component),但据我所知,它不允许我将容器放置在屏幕上与刷新前完全相同的位置。

【问题讨论】:

  • 请添加完整的代码示例

标签: codenameone


【解决方案1】:

由于您重建位置可能会改变,因此直接调用setScrollY() 可能不会提供相同的位置我认为这是不可行的,因为您需要更接近scrollComponentToVisible 的功能。

【讨论】:

  • 我查看了scrollComponentToVisible(Component c) 的代码,但由于涉及的复杂性和边缘情况,对我来说修改起来并不那么明显。您是否可以向其添加y参数,以指示滚动后c上边缘的特定所需y位置?然后在用户看来,好像c 保持固定在屏幕上,而周围的容器被更新。
  • 刚刚注意到另一个细节。它还需要避免scrollComponentToVisible 所做的视觉滚动,即使c 组件已经在屏幕底部可见,scrollComponentToVisible 通常会放置它。
  • 如果你想要一个特定的区域,你可以使用setScrollY(),只要你导出Container。您仍然可以调用scrollComponentToVisible,因为如果组件完全可见,它不会做任何事情。要禁用动画,只需调用 setSmoothScrolling(false),但不要忘记之后将其返回为 true。
  • 只是为了确保我理解:我应该在容器上使用 setScrollY() 我要滚动的元素列表,并且 Y 值应该是我要滚动的元素的新 Y 位置滚动到与以前相同的位置?也感谢setSmoothScrolling 上的信息。
  • 我正在考虑将 setScrollY() 调用到删除之前的原始 getScrollY() 值。这样一来,一切似乎都没有改变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
  • 2019-03-24
相关资源
最近更新 更多