我在我的应用中需要这种行为,“用户每次尝试启动时都必须登录(直接触摸应用程序图标,或者通过任务管理器或通过最近的应用程序触摸)” 所以活动按此顺序排列(认为App名称是Foo app)
“用户启动应用程序并按以下顺序继续: S - > L - > Lo (登录) - > M (选择其中一项任务) - > 任务屏幕
所以当他在任务屏幕时,他按下主页按钮,应用程序转到后台,他使用另一个应用程序。并再次午餐Foo应用程序。所以,如果他按下后退按钮,它会显示以前使用的任务屏幕 ???如果再次按下后退按钮,它会再次进入主屏幕,依此类推...... ???
这不应该发生,只是我想要的是,当应用程序到达前台时,用户需要登录并且永远无法返回任何屏幕。
注意:所有屏幕都扩展了一个扩展了Activity类的BaseActivity类。在那里我使用onResume(),onPause()方法和另一个自定义方法来找出扩展子类何时进入暂停状态,并在应用程序来自后台时恢复!在某些屏幕中我也不得不使用碎片......!
提前感谢您的时间和帮助!
答案 0 :(得分: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);
}
答案 1 :(得分:0)
我不会争论为什么你的问题会描述一个不那么令人愉快的用户体验,但你会对下面的解决方案有什么看法?
将 Lo,M 和 T 替换为片段。因此,在 L 之后,您将有一个活动( PostL ),您可以在其中显示第一个 Lo 片段,然后在用户操作上添加在Lo之上<{1>}之后的一个M 片段,然后继续前进,你会将M替换为T:get(Supported)FragmentManager.beginTransation().add(id, fragment).commit()
。 - 或者您可以在M之上添加T,这是您的选择,因为它可能更适合。
在这个PostL活动中,在get(Supported)FragmentManager.beginTransation().replace(id, fragment).commit()
方法中,如果片段backstack由多个片段组成,则只调用onPause()
- 底部片段为Lo 。 / p>
当用户点击主屏幕并重新进入应用程序(无论从哪里)或任何其他应用程序进入前台时,将以这种方式涵盖这两种情况。另外,如果你正确地考虑了后台堆栈大小,如果用户点击回来,那么他将始终打开最后一个片段(可能是M或Lo)。
我希望它有意义......