startActivityForResult从A-> B->(完成B)-> C,然后将结果从C发送回A

问题描述 投票:0回答:5

活动A位于堆栈的根,然后我启动ActivityForResult B,然后从B开始startActivityForResult C并完成B。因此,堆栈现在为A-C。

但是,当我在C中设置结果并将其完成时,活动A不会收到该结果。可以这样做吗?

android stack start-activity
5个回答
3
投票

您可以完成活动B,并显示“启动活动C”,然后针对活动A的结果启动活动C ...


1
投票

不是使用活动B的上下文来启动活动C,而是使用活动A的上下文来为结果启动它,这样,当您在C中设置结果并完成后,它将返回到A。


0
投票

我建议实现一个模式,您可以在其中将结果数据保存在活动C中,然后只需完成活动C,以使活动A出现在顶部即可,在活动A的onresume()中,您可以通过以下方式访问模式中的数据:条件并进行必要的操作...


0
投票
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
            }
        }


    }

}

0
投票

如果您想将活动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()
}
© www.soinside.com 2019 - 2024. All rights reserved.