更改可见范围时如何避免 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 的大小?

如何避免“元素当前不可见,因此可能无法与” Selenium Webdriver

AngularJS自定义验证指令 - 如何避免使用隔离范围

在视图已经可见时更改 uitabbar 图标

当列表视图的项目在颤动的视口中可见时,如何更改项目颜色并执行一些操作?