【问题标题】:Android how to open last screen on resumeAndroid如何在简历上打开最后一个屏幕
【发布时间】:2021-05-14 07:01:18
【问题描述】:
这更像是一个建议线程,所以我不能分享任何代码,因为我没有。
我的问题如下:
我有一个使用导航图的 android 应用程序,如果我使用系统后退按钮离开应用程序,它将始终在恢复时打开登录屏幕。所以我没有关闭应用程序,我只是把它放到后台。我的开始目的地确实设置为此登录片段,但是我必须更改哪些应用程序才能在我关闭应用程序的屏幕上打开?在这种情况下,登录后的屏幕在我的情况下可以指向 2 个不同的片段,所以我不能硬编码它。
【问题讨论】:
标签:
android
kotlin
android-navigation
【解决方案1】:
是的,您可以使用 SharedPreference 来做到这一点。
- 在登录片段中进行共享首选项并将其值设置为布尔值。
val sharedPreferences:SharedPreferences = this.requireActivity().getSharedPreferences("OnboardingDetails", Context.MODE_PRIVATE)
val boarded: Boolean = sharedPreferences.getBoolean("isLogin", false)
if (boarded) {
findNavController().navigate(OnboardingFragmentDirections.actionOnboardingFragmentToTransactionListFragment())
} else {
sharedPreferences.edit().putBoolean("isLogin", true).apply()
}
- 当用户安装应用程序时第一次出现登录屏幕时,布尔值为 false。
- 条件的其他部分执行使布尔值为真。这意味着用户已经完成了登录屏幕。
- 当用户下次打开您的应用时,布尔值为真,如果部分条件运行,则自动将用户带到下一个片段。
【解决方案2】:
在添加或显示 Fragmrnt 时尝试使用 addToBackStack(null)。
getSupportFragmentManager()
.beginTransaction()
.addToBackStack(null)//use this to add the fragment to the stack
.commit;
【解决方案3】:
您要使用返回按钮退出应用程序? As far as the system's concerned,即用户关闭应用(与滑动一样),期望应用下次“重新”启动。
在这些完全解雇的情况下,用户的假设是他们已经永久地离开了活动,如果他们重新打开活动,他们希望活动从干净的状态开始。这些解除场景的底层系统行为符合用户的期望 - 活动实例将被销毁并从内存中删除,以及存储在其中的任何状态以及与活动关联的任何已保存的实例状态记录。
因此,您并没有真正将其放入后台,而是在销毁最后一个活动/将最后一个项目从后台堆栈中弹出,因此应用程序在您下次打开时从导航流程的开头开始。这是标准行为。
如果您只是通过切换到另一个应用程序/进入主屏幕将其置于后台,它应该会在您切换回它时完全恢复。您可以通过在开发者选项中启用不保留活动进行测试,这样系统会在它进入后台时立即销毁它。
导航库文档中有一个示例几乎可以处理这个想法 - 它基本上与 Karmveer 的回答类似,但我想你可能想看看他们建议如何做:
https://developer.android.com/guide/navigation/navigation-conditional
但是,如果您确实想为用户首次打开应用程序并且他们已经登录时设置“默认”首页,那么您必须将该数据存储在某处,以便在决定去哪里时检查它导航。而且您必须根据需要对其进行更新(例如,每当用户在它们之间进行交换时,您将存储最新的)。共享偏好是通常的方式,或者如果你喜欢的话,还有新的 DataStore 东西