2011-11-09 18 views
0

假设有3活动(A,B和C)和活性A开始B,和B,因为活动B完成开始C.Android - 如何交付结果到任何活动?

我需要活动Ç递送结果到活动A,当开始活动Ç 。

这个代码不工作:

public class ActivityA extends Activity { 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, 
      Intent data) { 

     if (requestCode == ActivityC.REQUEST_CODE) { 
      // need this code be called when activityC finish 
     } 
     super.onActivityResult(requestCode, resultCode, data); 
    } 
} 

public class ActivityB extends Activity { 

    void startActivityC() { 
     Intent intent = new Intent(); 
     intent.setClass(this, ActivityC.class); 
     startActivityForResult(intent, ActivityC.REQUEST_CODE); 
     finish(); 
    } 
} 

public class ActivityC extends Activity { 
    public static final int REQUEST_CODE = 12345; 

    void finishActivity() { 
     Intent intent = new Intent(); 
     intent.putExtra("example", "example"); 
     setResult(RESULT_OK, intent); 
     finish(); 
    } 
} 

任何想法如何实现这一点?

谢谢!

回答

1

问题是你基本上试图从C点发送一个音符到A点,它必须经过B点,但B点决定它不想再传递音符,然后去做它自己的东西。所以这个音符就消失了。

在活动B,你已经告诉它你开始,对于结果的活动,因此而不是开始活动℃之后调用完成,处理活动结果,而不是再完成:

@Override 
protected void onActivityResult(int requestCode, int resultCode, 
     Intent data) { 

    if (requestCode == ActivityC.REQUEST_CODE) { 
     setResult(RESULT_OK, data); 
     finish(); 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 

这将允许活动B从活动C接收它所请求的结果,然后将其传递回活动A.

希望有所帮助。

+0

有没有办法让ActivityC直接将结果传递给ActivityA? – Rodrigo

+0

不直接。有间接的方法,例如通过一个静态实例控制的消息处理程序,但这里的问题是范围。活动A根本不知道活动C存在,反之亦然。因为C只是由B带来的,所以从C到A的通信的最佳方法是通过B.如果B刚刚启动C然后退出,那么B是否需要? C可以做什么吗?B可以直接从A发起? – Geekswordsman

相关问题