我正在为 Android 制作一个应用程序,我需要一些帮助。我有三个活动A,B和C。当我在A并开始B时,我不想完成()A因为我希望选择返回。但是如果我从B开始C我想完成A和B。我见过一些使用 startActivityForResult 的例子,但我从来没有掌握它的窍门。任何人都有一些简单的示例可以解释,所以我可以在我的代码中使用它?
提前致谢!
我正在为 Android 制作一个应用程序,我需要一些帮助。我有三个活动A,B和C。当我在A并开始B时,我不想完成()A因为我希望选择返回。但是如果我从B开始C我想完成A和B。我见过一些使用 startActivityForResult 的例子,但我从来没有掌握它的窍门。任何人都有一些简单的示例可以解释,所以我可以在我的代码中使用它?
提前致谢!
对于第一部分,当您将表单 B 移动到 C 时,您想从 A 完成此 StartActivityforResult 的 A 和 B,当您想从 B 移动到 C 完成 B 时,它将自动触发 A 的 onActivityResult,您可以在那里启动活动 C
这是 StartActivityforResult 的示例
http://saiful103a.wordpress.com/2011/03/19/android-startactivity-and-startactivityforresult/
Intent intent = new Intent( this, C.class );
intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP );
startActivity( intent );
使用该标志清除活动堆栈,因此当您按下 C 上的后退按钮时,您将移至主屏幕
我有三个意图 A、B 和 C。
为了清楚起见,我认为您的意思是Activity
s (您不能“进入” an Intent
)。
当我在 A 并开始 B 时,我不想完成() A,因为我希望选择返回。但是如果我从 B 开始 CI 想要完成 A 和 B。
你想做的是startActivityForResult(new Intent(this, C.class), requestCode)
从Activity B
. 然后在 中Activity B
,您覆盖B (因此,从 backstack 中弹出),或者您什么也不做(因此,留在 中onActivityResult()
)。finish()
B
B
这是您需要做的:
在你的类中定义一个public static final
请求代码(这被认为是好的做法)。您将使用此代码来区分startActivityForResult()
您可能进行的不同调用。
public static final int C_START_CODE = 0;
从Activity B
, 呼叫,
startActivityForRequest(C.class, C_START_CODE);
然后,通过如下B
覆盖来捕获结果,onActivityResult()
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case C_START_CODE:
if (resultCode == RESULT_OK) {
// Add code here as necessary before finishing B
// and backing out of the Activity to A.
finish();
}
default:
break;
}
}
最后,当您决定完成时Activity C
,请确保区分这两种情况:
如果您想完成Activity B
AND Activity C
,请致电
setResult(RESULT_OK);
finish();
如果您只想完成Activity C
,请致电
setResult(RESULT_CANCELED);
finish();