我的应用程序基本上包含每个项目的项目列表和详细信息屏幕。
最初启动时,我们会显示项目列表。如果用户在查看详细信息屏幕时切换到另一个应用程序,当他返回应用程序时,将显示详细信息屏幕。
所有这一切都是标准的,并且运作良好。但是,我的客户端需要用户在每次恢复应用程序时返回列表屏幕而不是详细信息屏幕。
我的第一个想法是记住细节活动暂停的时间,如果时间大于X秒,则完成并启动列表活动而不是恢复。
更可靠的方法吗?
PS:我知道我们不应该这样做,我已经向我的客户解释过,决定不是我的。答案 0 :(得分:1)
使用SharedPreference将暂停的详细信息活动的时间保存在onPause中,并在恢复时恢复检查已保存的时间和当前时间是否超过阈值(如果已通过),然后关闭它,否则保持打开状态。
答案 1 :(得分:0)
实施此解决方案,绝对有帮助。
基本上,应用程序实际上并没有完全重新启动,但是当启动器恢复应用程序时,您的启动活动正在启动并添加到活动堆栈的顶部。您可以通过在恢复应用程序时单击后退按钮来确认是这种情况,并显示启动活动。然后,您应该被带到您希望在恢复应用程序时显示的活动。
我选择实现解决此问题的解决方法是检查启动初始Activity的intent中的Intent.CATEGORY_LAUNCHER类和Intent.ACTION_MAIN操作。如果存在这两个标志并且Activity不在任务的根目录(意味着应用程序已在运行),那么我在初始Activity上调用finish()。这个确切的解决方案可能不适合你,但类似的东西应该。
以下是我在初始/启动活动的onCreate()
中所做的事情:
if (!isTaskRoot()
&& getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
&& getIntent().getAction() != null
&& getIntent().getAction().equals(Intent.ACTION_MAIN)) {
finish();
return;
}
有关isTaskRoot()
method reference.
答案 2 :(得分:0)
除了list_item活动(初始活动)之外,您必须为所有活动类提供以下onPause()方法。
@Override
protected void onPause() {
super.onPause();
Intent i = new Intent(getApplicationContext(), list_item_activity.class);
startActivity(i);
}
答案 3 :(得分:-1)
我可能会错误地理解你的问题,但为什么你要做所有的计时工作呢?我的意思是,假设您的列表和详细信息视图中有片段,只需添加一个标志来监视您的活动已停止并听取捕获您的活动恢复(通过onResume或onWindowFocusChanged)。如果它已停止并恢复,则转换到列表片段(如果它尚未显示)。
答案 4 :(得分:-1)
你可以在这里使用广播接收器。 并且在活动OnResume方法上使用呼叫来广播接收器并执行你需要的任何东西。
@Override
protected void onResume() {
super.onResume();
sendBroadcast(new Intent("YourActionHere"));
}