2012-05-08 22 views
0

我正在構建一個應用程序,其中第一個Activity由startActivityByResult啓動另一個應用程序。在完成一些設置後,我需要將設置結果發回。 所以我重寫了第二個Activity的onPause()方法,我得到了意圖putExra,並通過setResult()發回。 回到第一個活動。 onActivityResult肯定已被調用。我之前設置了resultCode,但意圖數據爲空。我無法弄清楚什麼是錯的。 這是我的代碼 的第一個活動OnActivityResult返回,但我得到了正確的requestCode

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Log.e("page1", requestCode + "_"); 
    Log.e("page1", resultCode + "_"); 
    Log.e("page1", (data == null) + "_"); 
    // if ((requestCode == 1) && (data != null)) { 
    if (data != null) { 
     String size = data.getStringExtra("size"); 
     Log.e("switch", size + "_"); 
     switch (size.charAt(0)) { 
     case '1': { 
      text.setTextSize(10); 
     } 
      break; 
     case '2': { 
      text.setTextSize(20); 
     } 
      break; 
     case '3': { 
      text.setTextSize(30); 
     } 
      break; 
     } 
    } 
} 

我的第二個活動

@Override 
protected void onPause() { 

    Intent intent = getIntent(); 
    Log.e("prefs", (intent == null) + "_"); 
    intent.putExtra("size", size); 
    setResult(3, intent); 
    super.onPause(); 
} 

我在logcat中測試。在第二個活動中。即將發送的意圖絕對不爲空。但是當它進入第一個活動。 null剛剛返回。這讓我非常瘋狂。幫幫我!

+0

你可以告訴你爲什麼在在onPause .. –

+0

設置結果檢查我的答案在你的問題下面。並檢查作爲答案,如果它適合你 –

+0

@BharatSharma原因是第二個活動是一個PreferenceActivity,其中一些喜好。如果我讓一個聽衆或類似的東西,每次我做任何修改,我必須發回一個我認爲是乏味的意圖。所以我正在考慮一種方式,在ueser完成所有設置後,按「返回」,此時secoend活動會將結果發送回去。但還有一件事要確保結果應該在第一個Activity重新啓動之前到達。 – ChinaMan

回答

0

你可以試試這個。 你想自動完成您的活動在暫停所有的情況下手動和背壓所以這將是更好地保存在您的onDestroy意圖數據

@Override 
    protected void onPause() { 
     super.onPause(); 
     finish(); 
    } 

    @Override 
    public void onDestroy() { 
     Intent intent = getIntent(); 
     intent.putExtra("size", size); 
     setResult(3, intent); 
     super.onDestroy(); 
    } 
+0

我試過了,但它不起作用。首先,必須調用super.onPause(),否則會拋出SuperClassNotCalledException()等異常。然後我在onPause()中創建一個新的意圖。再次在第一個活動中返回空值。神!我仍然可以理解。如果Intent數據爲空,它如何返回正確的requestCode。真的讓我想要粉碎我的電腦。 – ChinaMan

+0

如果你設置銷燬結果會更好。 –

+0

不,我試過了,失敗了。並且根據Activity的生命週期,要關閉的前一個Activity的onDestroyed()將在打開Activity的onCreate()後調用。所以它不起作用... – ChinaMan

1

問題與您的代碼在String size = data.getStringExtra("size");這一行。 你應該String size = data.getExtras.getString("size");

改變它在你的第一個活動:

Intent intent = new Intent(context,SecondActivity.class); 
startActivityForResult(intent, REQUEST_CODE); 

而在你的第二個活動讓一個按鈕叫SAVE,並在其監聽;

 Intent result = new Intent(); 
     Bundle bundle = new Bundle(); 

     bundle.putString("keyName", "KeyValue"); 

     result.putExtras(bundle); 
     setResult(RESULT_OK,result); 
     finish(); 

而且又在你的第一個活動的onActivityresult方法:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(resultCode==RESULT_OK){ 
     if(requestCode == REQUEST_CODE){ 
      Log.d("Activity Result", data.getExtras.getString("keyName"); 
     } 
    } 
} 
+0

對不起,我的問題是意圖數據爲空。請忽略我從意圖中檢索字符串的方式。我使用了一個按鈕來發回意圖。它工作得很好。但在這個應用程序中,我的第二個Activity是PreferenceActivity,所以我不想製作太多的組件。我需要的功能是當我退出第二個活動並完成設置時,意圖將被髮送。但正如我解釋的那樣。第一個Activity的onActivityResult有效,但沒有收到意圖。我不明白。 – ChinaMan

相關問題