【问题标题】:MVP Hold focus and list position with 2 ActivitiesMVP 通过 2 个活动保持焦点和列表位置
【发布时间】:2014-10-22 12:50:11
【问题描述】:

我有一个包含 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 默认状态,在列表的开头)。

但这不是我想要完成的,为什么 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>

【问题讨论】:

    标签: java gwt datagrid mvp


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多