我有一个包含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返回的活动实例与上次调用时返回的活动实例完全相同,则该活动将不会停止并重新启动,甚至不会从文档中分离并重新附加其“视图”。

如果对列表区域执行此操作,则应该可以解决滚动问题。

仅供参考,FilteredActivityMapperCachingActivityMapper旨在在这种情况下提供帮助:第一个将所有DetailsPlace映射到某个ListPlace,第二个则将缓存活动缓存到equals() ;这样,您真正的ActivityMapper可以专注于创建新的活动实例。话虽这么说,我倾向于不使用这些帮助程序,而在我自己的ActivityMapper YMMV中建立缓存。

10-05 17:58