Android 如何打开简历上的最后一个屏幕
Android how to open last screen on resume
这更像是一个建议线程,所以我不能分享任何代码,因为我有 none。
我的问题如下:
我有一个使用导航图的 android 应用程序,如果我使用系统后退按钮离开该应用程序,它将始终在恢复时打开登录屏幕。所以我没有关闭应用程序,我只是把它放到了后台。我的开始目的地确实设置为此登录片段,但我必须更改什么才能在关闭应用程序的屏幕上打开该应用程序?在这种情况下,它是登录后的屏幕,在我的情况下可以指向 2 个不同的片段,所以我不能只是硬编码。
添加或显示 Fragmrnt 时尝试使用 addToBackStack(null)。
getSupportFragmentManager()
.beginTransaction()
.addToBackStack(null)//use this to add the fragment to the stack
.commit;
是的,您可以使用 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。
- 执行条件的其他部分使布尔值变为真。这意味着用户已经完成了登录屏幕。
- 当用户下次打开您的应用时,布尔值为真,如果部分条件运行,则用户会自动转到下一个片段。
您要使用后退按钮退出应用程序吗? As far as the system's concerned,这是用户关闭应用程序(与将其滑开相同)并且期望应用程序下次“重新启动”。
The user's assumption in these complete dismissal cases is that they have permanently navigated away from the activity, and if they re-open the activity they expect the activity to start from a clean state. The underlying system behavior for these dismissal scenarios matches the user expectation - the activity instance will get destroyed and removed from memory, along with any state stored in it and any saved instance state record associated with the activity.
所以你并没有真正把它放到后台,你正在销毁最后一个 activity/popping 后台堆栈的最后一项,所以下次你从导航流的开头开始应用程序打开它。这是标准行为。
如果您只是通过切换到另一个应用程序/转到主屏幕将其置于后台,它应该会在您切换回它时完全恢复。您可以通过在开发人员选项中启用不要保留活动来测试它,这样系统会在它进入后台后立即销毁它。
导航库文档中有一个示例几乎可以处理这个想法 - 它基本上与 Karmveer 的回答一致,但我想您可能想看看他们建议如何做:
https://developer.android.com/guide/navigation/navigation-conditional
但是,如果您确实想为用户首次打开应用程序并且他们已经登录时设置“默认”第一页,则必须将该数据存储在某个地方,以便在决定时进行检查导航到哪里。并且您必须根据需要对其进行更新(例如,每当用户在它们之间交换时,您将存储最新的)。共享首选项是通常的方式,如果您喜欢
,也可以使用新的 DataStore
东西
这更像是一个建议线程,所以我不能分享任何代码,因为我有 none。
我的问题如下:
我有一个使用导航图的 android 应用程序,如果我使用系统后退按钮离开该应用程序,它将始终在恢复时打开登录屏幕。所以我没有关闭应用程序,我只是把它放到了后台。我的开始目的地确实设置为此登录片段,但我必须更改什么才能在关闭应用程序的屏幕上打开该应用程序?在这种情况下,它是登录后的屏幕,在我的情况下可以指向 2 个不同的片段,所以我不能只是硬编码。
添加或显示 Fragmrnt 时尝试使用 addToBackStack(null)。
getSupportFragmentManager()
.beginTransaction()
.addToBackStack(null)//use this to add the fragment to the stack
.commit;
是的,您可以使用 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。
- 执行条件的其他部分使布尔值变为真。这意味着用户已经完成了登录屏幕。
- 当用户下次打开您的应用时,布尔值为真,如果部分条件运行,则用户会自动转到下一个片段。
您要使用后退按钮退出应用程序吗? As far as the system's concerned,这是用户关闭应用程序(与将其滑开相同)并且期望应用程序下次“重新启动”。
The user's assumption in these complete dismissal cases is that they have permanently navigated away from the activity, and if they re-open the activity they expect the activity to start from a clean state. The underlying system behavior for these dismissal scenarios matches the user expectation - the activity instance will get destroyed and removed from memory, along with any state stored in it and any saved instance state record associated with the activity.
所以你并没有真正把它放到后台,你正在销毁最后一个 activity/popping 后台堆栈的最后一项,所以下次你从导航流的开头开始应用程序打开它。这是标准行为。
如果您只是通过切换到另一个应用程序/转到主屏幕将其置于后台,它应该会在您切换回它时完全恢复。您可以通过在开发人员选项中启用不要保留活动来测试它,这样系统会在它进入后台后立即销毁它。
导航库文档中有一个示例几乎可以处理这个想法 - 它基本上与 Karmveer 的回答一致,但我想您可能想看看他们建议如何做:
https://developer.android.com/guide/navigation/navigation-conditional
但是,如果您确实想为用户首次打开应用程序并且他们已经登录时设置“默认”第一页,则必须将该数据存储在某个地方,以便在决定时进行检查导航到哪里。并且您必须根据需要对其进行更新(例如,每当用户在它们之间交换时,您将存储最新的)。共享首选项是通常的方式,如果您喜欢
,也可以使用新的DataStore
东西