活动A位于堆栈的根,然后我启动ActivityForResult B,然后从B开始startActivityForResult C并完成B。因此,堆栈现在为A-C。
但是,当我在C中设置结果并将其完成时,活动A不会收到该结果。可以这样做吗?
您可以完成活动B,并显示“启动活动C”,然后针对活动A的结果启动活动C ...
不是使用活动B的上下文来启动活动C,而是使用活动A的上下文来为结果启动它,这样,当您在C中设置结果并完成后,它将返回到A。
我建议实现一个模式,您可以在其中将结果数据保存在活动C中,然后只需完成活动C,以使活动A出现在顶部即可,在活动A的onresume()中,您可以通过以下方式访问模式中的数据:条件并进行必要的操作...
class A extends Activity
{
protected void onCreate(Bundle savedInstanceState)
{
// code.........
Button button=findViewById(R.id.btn_id);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v)
{
Intent intent=new Intent(A.this,B.class);
startActivityForResult(intent, 1001);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK )
{
if(requestCode==1001)
{
Intent intent=new Intent(A.this,C.class);
startActivityForResult(intent, 1002);
}
else if(requestCode==1003)
{
//here you will get the result form c
}
}
}
}
如果您想将活动C的结果传递回活动A:
在活动A中,呼叫B:
Intent showB = new Intent(ActivityA, ActivityB);
startActivityForResult(showB, RequestCode);
在活动B中,呼叫C:
Intent showC = new Intent(ActivityC);
showC.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
startActivity(showC);
finish();
在活动C中:
//set the result code and close the activity
Intent result = new Intent();
setResult(RESULT_OK, result);
finish();
在活动A:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
doSomeStuffIfRequestCodeMatched()
}