Elo*_*rro 5 android android-activity
我有5个活动(让我们说A,B,C,D和E).活动A到D用于设置一些数据,因此用户可以来回更改任何内容.活动E,在另一方面,是总结,所以用户不再被允许回去.
我的想法是在用户到达时完成之前的所有活动 E
目前,我的活动A,以D没有重视他们的标志.
Activty E被称为:
Intent I = new Intent(this, SomeClass.class);
I.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(I);
我到处都读到这些标志应该实现我想要做的事情,但是当用户进入活动E并按下Back按钮时,应用程序将返回活动状态D.
有任何想法吗?我错过了什么?这不是解决这个问题的正确方法吗?
谢谢你的帮助
在每个活动A,B,C,D中使用方法startActivityForResult而不是startActivity.当用户退出活动E时,处理后退按钮并在intent中设置结果代码.现在在每个A,B,C和D类的onActivityResult方法中处理它,关闭活动并将结果传递给前一个活动.
您也可以在用户完成活动D后立即执行此操作.当用户从D转到E时,您可以使用上述方法实际上一直向下到活动A,然后打开活动E并完成活动A.
上述两种情况都会从用户角度产生相同的结果,除非您在这些活动的onStart方法中执行一些长时间的工作,否则它们不会看到中间活动A,B,C,D.
万一有人需要@achie建议的代码,这里是:
A,B,C,D活动应该开始以下活动:
Intent myIntent = new Intent(this, B.class); // Or C/D
startActivityForResult(myIntent, 1);
Run Code Online (Sandbox Code Playgroud)
此外,A,B,C,D活动应覆盖:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == 1) {
setResult(RESULT_OK);
finish();
}
}
Run Code Online (Sandbox Code Playgroud)
那么E活动应该处理后退按钮:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
setResult(RESULT_OK);
}
return super.onKeyDown(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5827 次 |
| 最近记录: |