我有一个包含2个活动的应用程序,一个是DataGrid列表,另一个是列表中某个条目的详细活动。它们都位于相同的布局页面上:
__________________
| ListView |
| - entry 1 |
| - entry 2 |
| - entry 3 |
| - .... |
| - entry n |
|------------------|
| DetailsView |
|__________________|
dataGrid高度是固定的,因此我有一个ScrollPanel来获取某些条目,如果你点击某些条目。
当我实现删除条目的功能时。我发送了一个delete
,在回复之后,我收到了一个GET
调用的新列表并重新填充了我的dataGrid。因此,当我,例如删除条目42时,对于你必须向下滚动的内容,该条目将被删除,并且滚动面板位置与新加载的列表保持一致,正如我想要的那样。所以我的下一步是更改细节,所以我使用我的placeController
加载一个新的空DetailsView,因为旧的选定的一个已被删除。但是当我调用新的DetailsPlace
我的ListView
更改并且ScrollPanel位置是列表的开头(ScrollPanel默认状态,在列表的开头)。
但那不是我想要完成的,为什么ScrollBar会在goTo(place)
调用后发生变化。感谢任何帮助。
更新:
另一个方面是,在同一布局中使用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>
答案 0 :(得分:1)
如果您的ActivityMapper
返回的活动实例与之前调用的活动实例完全相同,则该活动将不会停止并重新启动,甚至也不会从文档中分离出“视图”并重新附加。
如果您为列表区域执行此操作,则应解决滚动问题。
仅供参考,FilteredActivityMapper
和CachingActivityMapper
旨在帮助解决这种情况:第一个将所有DetailsPlace
映射到某些ListPlace
,第二个需要注意缓存equals()
的地点的活动;这样,您的真实ActivityMapper
可以专注于创建新的活动实例。话虽这么说,我倾向于不使用这些助手并在我自己的ActivityMapper
,YMMV中构建缓存。