startActivityForResult来自A-> B->(完成B) - > C并将结果从C发送回A

时间:2013-12-12 09:45:22

标签: android stack start-activity

活动A位于堆栈的根目录,然后是startActivityForResult B,然后是来自B的startActivityForResult C并完成B ..因此堆栈现在是A-C。

但是当我在C中使用setResult并完成它时,活动A不会收到此结果。这可能吗?

5 个答案:

答案 0 :(得分:3)

您可以使用“启动活动C”的结果完成活动B,然后从活动A的结果开始活动C ...

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我建议实现一个模态,你可以在活动C中保存结果数据,然后完成活动C,使活动A出现在顶部,在活动A的onresume()中你可以访问模态中的数据一些条件并做必要的操作...

答案 3 :(得分: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
            }
        }


    }

}

答案 4 :(得分: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()
}