java - 按后退按钮时不要终止 Activity

标签 java android navigation android-activity countdowntimer

我有四项 Activity ,ABCD。

用户最初会转到 ABCD,然后用户可能想要点击后退按钮来检查 C 上的某些内容,然后再点击 C 上的按钮将其转到 D。

我遇到的问题是 D 正在运行一个倒计时器,它需要继续倒计时并更新 Activity D View 。如果我当前点击返回返回到 C,然后再次点击前进到 D,倒计时器仍在运行,但未连接,因为已为 D 创建了新 Activity 。

我希望用户能够导航回 C,而不影响或破坏 D,这样我就可以将计时器连接到 View 。

最后,如果用户点击返回 B,则会破坏 C 和 D Activity (以及倒计时器)。

最佳答案

当用户离开 Activity 时,在 saveInstanceState 回调中保存计时器值和当前时间非常简单。当 Activity 重新创建时,使用计时器值加上(当前时间 - LastSavedTime)并设置计时器。


它应该可以正常工作,但是您可以通过使用 fragment 和 ViewPager 以更好的方式实现这一点。

如果您之前没有使用过 ViewPager。它是一个组件,可让您通过向左或向右滑动屏幕来在不同 View 之间切换。默认情况下, View 分页器会加载当前 View 及其两侧附近的 View 。因此,如果您位于第 1 页(索引 0),则加载第 1 页和第 2 页。如果您位于第 2 页,则将加载第 2 页、第 1 页和第 3 页,依此类推。好消息是您可以使用这样的简单代码更改每个 fragment 附近加载的页面数

mViewPager.setOffscreenPageLimit(3);

现在 4 个 fragment 都已加载。所以你有 4 个 fragment 全部加载到屏幕上。根据developers.android.com,所有其他 View (屏幕上的一个除外)都已加载,但处于空闲状态,因此我认为您不能将计时器放在 fragment D内。但这不会是问题,因为您只有一项 Activity 。在您拥有的唯一一个 Activity 中实现计时器,它将正常工作,因为当页面更改时该 Activity 不会被破坏。但您仍然需要保存相同的数据(计时器数据+当前时间),因为 Activity 可能会由于用户切换到另一个应用程序而停止。

您需要做的最后一件事是访问 fragment 内的计时器数据。我不会解释如何进行,因为有很多关于如何在 Activity 和 fragment 之间进行通信的教程,但只是为了给您一个想法,您需要在 fragment 内声明一个接口(interface),在 Activity 中实现此接口(interface)并在 fragment 内使用此接口(interface)来访问定时器数据。

第二种解决方案要复杂得多,但它为用户提供了更好的体验,并且性能提升也很明显。确定女巫一号最适合您。祝你好运

关于java - 按后退按钮时不要终止 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23363672/

相关文章:

java - Tomcat6连接mySQL问题

java - GridWorld 中的移动算法

android - HelloWebViewClient 无法解析为类型

android - Retrofit/OkHttp3 400 错误正文为空

jquery - 跨越容器宽度的重叠内联元素

html - 居中 CSS 菜单(我已经查看了很多答案,但无法弄清楚这个)

java - 404错误的解决方法 使用带有json的restful web services

java - 使用鼠标事件 : Am I doing this correctly?

java - Android GridLayout - 屏幕的一半

windows-phone-7 - 在页面 NavigationService.GoBack() 上传递数据