更改可见范围时如何避免 CellList/Table 自动滚动到所选项目
Posted
技术标签:
【中文标题】更改可见范围时如何避免 CellList/Table 自动滚动到所选项目【英文标题】:How to avoid CellList/Table from automatically scrolling to selected item when visible range is changed 【发布时间】:2012-08-03 08:40:09 【问题描述】:我正在使用 CellList 展示示例 (http://gwt.google.com/samples/Showcase/Showcase.html#!CwCellList) 实现具有无限滚动功能的自定义 CellTable。但是,我在 CellList/Table 中发现了一个在这种情况下不受欢迎的功能:单击项目后更改可见范围会导致列表/表格自动滚动到所选项目。
您可以尝试上面的展示示例来查看完全相同的行为。没有选中项时,无限滚动效果很好,但是当你单击一个项然后滚动它时,当范围发生变化时,它总是会跳回到选中的项。
我还发现只有当焦点还在项目上时才会发生,也就是说,如果你选择一个项目然后点击其他地方失去焦点,它就不会发生。
我一直在研究 GWT 代码并试图找出如何禁用此功能但没有成功。以前有人处理过这种情况吗?
【问题讨论】:
这很奇怪:我的客户抱怨您刚刚描述的行为 absence,我无法让我的单元格表在刷新时滚动到所选条目: ( 另外,展示示例并没有为我跳回去。他们可能已经修好了。 @törzsmókus 刚刚使用 Chrome 27 尝试了展示案例,但问题仍然存在。例如,当焦点位于编辑文本框之一时,它也不会发生。 【参考方案1】:作为一种简单的解决方法,您可以在某些元素上调用 focus()
,以从项目中移除焦点(不移除选择)。
在展示示例中,在ShowMorePagerPanel
中添加例如
scrollable.getElement().focus();
在onScroll(ScrollEvent event)
方法的开头。
【讨论】:
这确实是一种让它工作的快速方法,谢谢!但是,我仍然认为如果我们可以简单地禁用该行为会更好。【参考方案2】:我遇到了同样的问题,无法得到 Chris 的答案来解决它,但以下解决方案对我有用:
在您的 onScroll(ScrollEvent event)
方法中,添加类似于以下内容的行,假设 yourTable 是扩展 AbstractHasData 的实例
yourTable.setFocus(false);
【讨论】:
以上是关于更改可见范围时如何避免 CellList/Table 自动滚动到所选项目的主要内容,如果未能解决你的问题,请参考以下文章
UIKeyboard 可见时如何更改 UITableView 的大小?