我有一个具有 2 个 Activity 的应用程序,一个是 DataGrid 列表,另一个是列表中某个条目的详细信息 Activity 。它们都位于同一布局页面上:
__________________
| ListView |
| - entry 1 |
| - entry 2 |
| - entry 3 |
| - .... |
| - entry n |
|------------------|
| DetailsView |
|__________________|
dataGrid 高度是固定的,因此我有一个 ScrollPanel 来访问某些条目,并且如果您单击某些条目。
当我实现删除条目的功能时。我发送一个 delete
消息,在响应 OK 后,我通过 GET
调用获取新列表并重新填充我的 dataGrid。因此,当我删除条目 42 时,您必须向下滚动一点,该条目将被删除,并且滚动面板位置与新加载的列表保持相同,正如我所希望的那样。所以我的下一步是更改一些详细信息,因此我使用 placeController
加载一个新的空 DetailsView,因为旧的选定的已被删除。但是,当我调用新的 DetailsPlace
时,我的 ListView
会发生变化,并且 ScrollPanel 位置是列表的开头(ScrollPanel 默认状态,在列表的开头)。
但这不是我想要完成的,为什么 ScrollBar 在 goTo(place)
调用后发生变化。感谢您的帮助。
更新:
另一个方面是,在同一布局中使用 2 个 Activity 是否是一个好主意?或者将两者比较到一个 Activity 和 View 中是否更明智:
有点像(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
返回与上次调用时返回的 Activity 实例完全相同的 Activity 实例,则该 Activity 将不会停止并重新启动,甚至其“ View ”也不会与文档分离并重新连接。
如果您对列表区域执行此操作,则应该可以解决滚动问题。
仅供引用,FilteredActivityMapper
和 CachingActivityMapper
旨在帮助解决这种情况:第一个将所有 DetailsPlace
映射到某个 ListPlace
,第二个负责缓存 equals()
位置的 Activity ;这样,您真正的 ActivityMapper
就可以专注于创建新的 Activity 实例。话虽这么说,我倾向于不使用这些助手并在我自己的 ActivityMapper 中构建缓存,YMMV。
关于java - MVP 通过 2 项 Activity 保持焦点并列出位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26507863/