2014-07-16 52 views
0

OnAcivityResult問題,我有三個活動:A,B和C的setResult和Android的

的主要活動是一個

public class A extends Activity{ 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     Log.i("TESTING", "OnAcivity Invoked"); 
    } 

    public void start_B_forResult() { 
     Intent intent = new Intent(); 
     startActivityForResult(intent, Util.REQUEST_UPDATE); 
    } 
    . 
    . 
    . 
} 

活動一個之間調停和C

public class B extends Activity{ 

    public void call_C() { 
     Intent intent = new Intent(B.this, C.class); 
     startActivityForResult(intent, Util.REQUEST_UPDATE); 
     finish(); 
    } 
    // ... other functions 

} 

,這是活動Ç

public class C extends Activity{ 

    public void finishC() { 
     setResult(RESULT_OK); 
     finish(); 
    } 
    // ... other funcitons 
} 

所以,當我去從C返回一個,onAcitivitResult甚至沒有當我設置的結果調用

setResult(REQUEST_OK); 

我試圖從BAonActivityResult正常調用

那麼如何將這個結果從B拋出C到A,那麼在A中可以調用onActivityResult

我想是讓onActivityResult被調用,當我去由C回到A

+2

爲什麼在完成startActivityForResult for C之後的活動B? C很可能沒有任何報道。 –

+1

太,B還沒有onActivityResult方法,B將關閉ont方法,在設置結果(setResult)之前 –

+0

由於除了屬性如何午餐C以外沒有什麼可做C @ Losin'Me – MBH

回答

1

我認爲這是自我解釋的,A不能直接從C得到結果,你必須從C得到結果B,然後把結果從B重新發送給A,B應該是橋,結果需要穿過他從去和回

的主要活動是一個

public class A extends Activity{ 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == Util.REQUEST_UPDATE){ 
      Log.i("TESTING A result", resultCode);//log the Result, it depends from the result given by C 

     } 
    } 

    public void start_B_forResult() { 
     Intent intent = new Intent(); 
     startActivityForResult(intent, Util.REQUEST_UPDATE); 
    } 
    . 
    . 
    . 
} 

活性Ç之間介體:

public class B extends Activity{ 

    public void call_C() { 
     Intent intent = new Intent(B.this, C.class); 
     startActivityForResult(intent, Util.REQUEST_UPDATE); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == Util.REQUEST_UPDATE){ 
      Log.i("TESTING B result", resultCode); 
      Intent returnIntent = new Intent(); 
      setResult(resultCode,returnIntent);//set result from C to A, CANCELLED or OK 
      finish();//And then, finish the activity, here is the correctly finished, not in call_C upper function, if you finish in call_C, the result never will come back from C to B 


     } 
    } 
    // ... other functions 

} 

,這是活動Ç

public class C extends Activity{ 

    public void finishC() { 
     Intent returnIntent = new Intent(); 
     setResult(RESULT_OK,returnIntent); 
     //setResult(RESULT_CANCELED,returnIntent); 
     finish(); 
    } 
    // ... other funcitons 
} 
+1

這很好。這將工作,@MBH刪除finish();像我一樣在他們的ActivityC中調用callC()函數,Brian建議。 –

+1

我會嘗試它,它看起來工作,因爲我想它 – MBH

0

,對於結果的請求活動是將接收結果的活動。在你的情況下,活動C是由活動B啓動的,所以當它有一個結果時,C會報告給B,而不是A.因爲你在開始C之後立即返回B,所以C的結果基本上丟失了。

也許你可以做的是擺脫finish()起始物C之後,對B中onActivityResult實現從C得到的結果,然後將結果從B.

傳回A
1

創建一個父對兒童的活動A,BC。並捕捉父母活動的結果。

例如:

父活動:

public class ParentActivity extends Activity { 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     switch(requestCode) { 
      case ActivityRequests.FIRST_ACTIVITY_REQUEST : 
       //do stuff 
       break; 
      case ActivityRequests.SECOND_ACTIIVITY_REQUEST : 
       //do stuff 
       break; 
     } 
     super.onActivityResult(requestCode, resultCode, data); 
    } 

    public void startB() { 
     Intent intent = new Intent(this,B.class); 
     startActivityForResult(intent, ActivityRequests.FIRST_ACTIVITY_REQUEST); 
    } 

    public void startC() { 
     Intent intent = new Intent(this,C.class); 
     startActivityForResult(intent, ActivityRequests.SECOND_ACTIIVITY_REQUEST); 
    } 
} 

兒童:

public class A extends ParentActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     startB(); 
    } 
} 

public class B extends ParentActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     startC(); 
    } 
} 

public class C extends ParentActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setResult(RESULT_OK); 
     finish(); 
    } 
} 

要complexive :)

+0

是複雜的現在好。但是,當你想在一段時間後檢查你自己的代碼時,得到它如此之好將會很複雜 – MBH

相關問題