2012-02-06 27 views
2

我正在開發一個以android 1.6爲目標的項目。android 1.6,後退按鈕和onActivityResult

所以,我不能用

@Override public void onBackPressed(){...} 

我開始與

startActivityForResult(intent,requestcode) 

一個活動,我wan't找回一些信息與

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

問題如下:

-'Activity A」拋出‘活動B’

-during‘硬件後退按鈕被按下

-'Activity A的onActivityResult叫,但我沒有得到數據中的任何信息(數據ActivityB’= = NULL)

我試圖把一些額外的信息,在「活動B的

@Override protected void onPause(){...} 

我還呼籲的setResult(RESULT_OK,我);這個在onPause,但我總是RESULT_CANCELED和數據== NULL在「活動A的onActivityResult

回答

9

相反onBackPressed,你可以使用:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if ((keyCode == KeyEvent.KEYCODE_BACK)) { 
     //set result and finish() 

    } else { 
     return super.onKeyDown(keyCode, event); 
    } 
} 
+0

非常感謝pjanecze!你是對的。 在onPause(...),onPause之前,執行setResult(...)和finish()完成! 我認爲這裏的關鍵是,在onPause中完成任務是太遲了,setResult和finish都不會起作用。 – 2012-02-06 23:09:56

2

我沒有看到你傳遞給常量的值和來回。它們很重要。

下面是對於結果調用一個活動我工作的一些代碼片段:

--------------------------- ---------- PackVideo活動------------------------------------ -

呼籲ServerSetActivity

Intent serverSetIntent = new Intent(); 
serverSetIntent.setClass(this, ServerSetActivity.class); 
startActivityForResult(serverSetIntent, CHANGE_IP); 

常數設置,並導致醒目:
(我有他們在一起,因爲只有在這裏捉兩costants滿足)

static public int CHANGE_IP = 1000; 
static public int CHANGE_IP_DONE = 1001; 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // If the request was for CHANGE_IP and the request was CHANGE_IP 
    if (resultCode == CHANGE_IP_DONE && requestCode == CHANGE_IP) { 
     readBaseInfoFromServer(getApplicationContext()); 
     startVideoPlayerService(getApplicationContext()); 
     setCurrentChannelAndPlay(getApplicationContext(), 0); 
    } 
} 

--------------------------- -------- ServerSetActivity --------------------------------------- - 被叫活動

結局

final Intent intent = new Intent(); 
setResult(PackVideo.CHANGE_IP_DONE, intent); 
finish(); 
+0

謝謝Gangnus 但問題不是這裏的常量。 我認爲更多的是執行流程問題。 問題在firts答案的第一條評論中得到解決。 – 2012-02-06 23:20:55

+0

好吧,對不起,我沒有幫助:-) – Gangnus 2012-02-06 23:23:48

0
@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     // check if the request code is same as what is passed here it is 2 
     if (resultCode != RESULT_OK) { 
      if (requestCode == 2 && data != null) { 
//DO YOUR OVER HERE}