3

我在我的应用程序中需要这种行为,“用户每次尝试启动它时都必须登录(直接触摸应用程序图标,或通过任务管理器或通过最近的应用程序)”所以活动按此顺序排列(想想应用程序名称是 Foo 应用程序)

  1. S - 启动画面
  2. L - 载入画面
  3. Lo - 登录屏幕
  4. M - 主菜单(有任务列表)
  5. T - 任务屏幕

“用户启动应用程序并按以下顺序进行: S -> L -> Lo(登录)-> M(选择其中一项任务)->任务屏幕

  • 所以当他在任务屏幕中时,他按下主页按钮,应用程序进入后台,他使用另一个应用程序。并再次使用 Foo 应用程序。所以在这里如果他按下返回按钮,它会显示以前使用的任务屏幕???如果再次按下返回按钮,它会再次进入主屏幕,依此类推......???

  • 这不应该发生,只是我想要的是,当应用程序进入前台时,用户需要登录并且永远无法返回任何屏幕。

注意:所有屏幕都扩展了一个 BaseActivity 类,该类扩展了 Activity 类。在那里我使用了 onResume()、onPause() 方法和另一个自定义方法来找出扩展子类何时暂停,并在应用程序来自后台时恢复!!!在某些屏幕中,我也不得不使用片段......!

提前感谢您的时间和帮助!

4

2 回答 2

0

将标签添加android:clearTaskOnLaunch="true"到清单中的根(主)活动标签。然后用户将始终返回此活动。

要从任何其他活动跳转到登录,请使用:

public static void logoff(Context c){
    Intent logoff = new Intent(c,LoginActivity.class);
    logoff.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
    c.startActivity(logoff);
}
于 2013-06-14T11:14:32.520 回答
0

我不会争论为什么你的问题描述了一个不那么愉快的用户体验,但是你对下面的解决方案有什么看法?

Lo、MT替换为片段。因此,在L之后,您将有一个活动(PostL),您将在其中显示第一个Lo片段,然后在用户操作中,您将在 Lo 顶部添加一个 M片段 by get(Supported)FragmentManager.beginTransation().add(id, fragment).commit(),然后继续前进,您将 M 替换为 T: get(Supported)FragmentManager.beginTransation().replace(id, fragment).commit()。- 或者您可以在 M 之上添加 T,这是您的选择,因为它可能更适合。

在这个 PostL 活动中,只有当片段回栈由多个片段组成时,onPause()您才会调用 in 方法-底部片段是 Loget(Supported)FragmentManager.popBackStack()

当用户点击主屏幕并重新进入应用程序(无论从哪里)或任何其他应用程序进入前台时,这种方式都将被覆盖。此外,如果您正确考虑了 backstack 大小,如果用户点击返回,那么他将始终打开最后一个片段(可能是 M 或 Lo)。

我希望这是有道理的...

于 2013-06-16T20:55:54.540 回答