MVP通过2个活动保持焦点和列表位置

时间:2014-10-22 12:50:11

标签: java gwt datagrid mvp

我有一个包含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>

1 个答案:

答案 0 :(得分:1)

如果您的ActivityMapper返回的活动实例与之前调用的活动实例完全相同,则该活动将不会停止并重新启动,甚至也不会从文档中分离出“视图”并重新附加。

如果您为列表区域执行此操作,则应解决滚动问题。

仅供参考,FilteredActivityMapperCachingActivityMapper旨在帮助解决这种情况:第一个将所有DetailsPlace映射到某些ListPlace,第二个需要注意缓存equals()的地点的活动;这样,您的真实ActivityMapper可以专注于创建新的活动实例。话虽这么说,我倾向于不使用这些助手并在我自己的ActivityMapper,YMMV中构建缓存。