我有一个包含2个活动的应用程序,一个是DataGrid列表,另一个是列表中某个条目的详细信息活动。它们都在同一布局页面上:
__________________
| ListView |
| - entry 1 |
| - entry 2 |
| - entry 3 |
| - .... |
| - entry n |
|------------------|
| DetailsView |
|__________________|
dataGrid的高度是固定的,因此我有一个ScrollPanel可以访问某些条目,如果您在某些条目上略过。
当我实现一个删除条目的功能时。我发送
delete
,并在响应OK之后,我通过GET
调用获取新列表,并重新填充我的dataGrid。因此,当我删除条目42(例如,对于您必须向下滚动的内容)时,该条目将被删除,并且滚动面板的位置将与新加载的列表保持一致,就像我想要的那样。因此,我的下一步是更改详细信息,因此我用placeController
加载了一个新的空DetailsView,因为旧的选定视图已被删除。但是,当我调用一个新的DetailsPlace
时,我的ListView
会发生变化,并且ScrollPanel的位置是列表的开头(ScrollPanel默认状态位于列表的开头)。但这不是我想要完成的,为什么在
goTo(place)
调用后ScrollBar发生变化。感谢任何帮助。更新:
另一个方面是,在同一布局中使用2个活动甚至是一个好主意。还是将两者都比较成一个活动并进行查看会更聪明?
有点像(uiBinder):
<g:ResizeLayoutPanel ui:field="listContent" width="100%" height="100%">
<g:ScrollPanel ui:field="listScrollPanel" width="100%" height="250px">
<c:DataGrid ui:field='dataGrid' width="100%" height="250px" />
</g:ScrollPanel>
</g:ResizeLayoutPanel>
<g:ScrollPanel>
<g:HTMLPanel width="100%" height="100%">
<table border="0" width="100%" styleName="{style.detailsTable}">
<!-- Details Table data -->
</table><br/>
</g:HTMLPanel>
</g:ScrollPanel>
最佳答案
如果您的ActivityMapper
返回的活动实例与上次调用时返回的活动实例完全相同,则该活动将不会停止并重新启动,甚至不会从文档中分离并重新附加其“视图”。
如果对列表区域执行此操作,则应该可以解决滚动问题。
仅供参考,FilteredActivityMapper
和CachingActivityMapper
旨在在这种情况下提供帮助:第一个将所有DetailsPlace
映射到某个ListPlace
,第二个则将缓存活动缓存到equals()
;这样,您真正的ActivityMapper
可以专注于创建新的活动实例。话虽这么说,我倾向于不使用这些帮助程序,而在我自己的ActivityMapper
YMMV中建立缓存。