【问题标题】:How restore correct state of view after minimize and restore application?最小化和恢复应用程序后如何恢复正确的视图状态?
【发布时间】:2017-12-09 13:45:43
【问题描述】:

我尝试使用 Mosby。但是我有一个问题。

我有 Activity (view)、presenter、model 和 viewState。 在活动中我有按钮。当我点击按钮时,我从演示者那里调用方法来加载数据:

presenter.loadData()

加载数据的方法调用2个方法:

1.view.showProgress

  1. model.getData()

方法model.getData() 创建ASYNC http 请求(改造)。请求完成后,从视图中比演示者调用方法,view.hideProgress()

好的。这个方案很好用。

但我有一个问题。 步骤:

1.点击查看按钮

2.presenter.loadData()

3.在presenter中调用view.showProgress()并启动async http请求

4.最小化应用程序

5.Activity被销毁

6.作为viewState调用方法saveInstanceState()的结果保存当前视图状态(显示进度)

7.5秒后网络请求完成,主持人尝试拨打view.hideProgress()

8.但是Activity不存在,结果什么也没发生。

9.用户返回应用

  1. 作为viewState中的结果调用方法restoreInstanceState()

  2. 结果进度再次显示,因为此状态保存在 viewState 中(参见第 6 项)。

问题是进度必须隐藏,因为网络请求在应用程序最小化时成功完成(对用户不可见)。

我该如何解决问题?

【问题讨论】:

  • saveInstanceState() 不会在应用程序最小化后调用,不是吗?仅在最小化时,但之后 UI 中的所有更改都会丢失

标签: android mosby


【解决方案1】:

当您收到HTTP 响应时,您应该将它存储在某个地方,例如,它可以是存储在内存中的repository,或者可能是一些local 存储。然后,当您调用 model.getData() 时,您应该检查数据是否已保存,如果没有保存数据,请从模型返回此数据(如果需要,再发送一个 HTTP 请求以获取更新的数据) - 发送 HTTP 请求. 所以现在,当活动打开时,您调用presenter.getData(),它在内部调用view.showProgress()model.getData(),模型返回一些缓存数据(如果可用)和presented 调用view.hideProgress()

【讨论】:

  • 没有帮助,因为我创建了异步 http 请求。所以in方法ifViewAttached(OfferDetailsView::setDownloadMode);方法setDownloadMode没有调用
猜你喜欢
  • 1970-01-01
  • 2014-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多