2012-04-06 47 views
8

我有2個活動,每個活動在單獨的應用程序中。活動1有一個按鈕,用戶可以點擊並在其onClick()方法調用使用意向的第二個活動:Android onActivityResult早期調用

Intent myIntent = getPackageManager().getLaunchIntentForPackage(com.myProject.Activity2); 
startActivityForResult(myIntent, 600); 

這正確地從活動1啓動活性2,但onActivityResult被稱爲活性1 onCreate之前被稱爲活性2,而不是在onBackPressed()的地方,我設置了返回意向。

這裏是活性2的onCreate方法:

@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
} 

這裏是onBackPressed方法的活性2當前版本:

@Override 
public void onBackPressed() { 
    Intent intent = new Intent(); 
    intent.putExtra("Stuff", someStuff); 

    if(getParent()==null){ 
     setResult(Activity.RESULT_OK, intent); 
    }else{ 
     getParent().setResult(Activity.RESULT_OK, intent); 
    } 
    finish(); 
    super.onBackPressed(); 
} 

我AndroidManifest.xml中有活性2以下意圖過濾器:

<intent-filter> 
    <action android:name="android.intent.action.MAIN"/> 
    <category android:name="android.intent.category.LAUNCHER"/> 
</intent-filter> 

我確認我的launchModestandard(而不是singleTask等),建議here和我的請求代碼是不負面的,因爲警告here。我也試過android:launchMode="singleTop",但那也是不行的。

我也試過提到here(也只有super.onBackPressed()的建議here),並再次調用它的建議here不是活性2調用onBackPressed()finish()

此外,我試圖註釋掉intent.putExtra("Stuff", someStuff);行,因爲它似乎造成this person麻煩。

任何想法,我可能做錯了什麼?

回答

9

所以這裏是照顧它的最終解決方案:

我改變了原意爲活動1以下幾點:

Intent myIntent = new Intent(); 
myIntent.setClassName("com.myProject", "com.myProject.Activity2"); 
startActivityForResult(myIntent, 600); 

出於某種原因的Android需要爲第二個參數的完全限定名除了第一個參數給出的包名之外。現在它工作了! :)

+1

非常感謝您回來併發布您的解決方案。我一直在這個問題上停留了很長時間,我也嘗試了在你的問題中遇到的所有解決方案都無濟於事。這固定它,並使我的一天更好= = – 2012-10-10 20:02:54

+0

我使用startActivityForResult WITHOUT setClassName或完全限定的名稱遍佈我的項目,他們都工作完美,除了一種情況。所以我在這種情況下嘗試了你的解決方案,但它沒有任何區別。 – user316117 2013-03-28 19:10:21

+0

2h !!謝謝你的解決方案 – Anthone 2014-09-10 16:55:57

0

不確定你的問題是什麼。您在Activity1中創建Intent的方式很奇怪;該方法不適用於創建在同一應用中啓動另一個活動的意圖。一些開發人員使用Intent(上下文,類<>)構造函數。我更喜歡使用Intent(字符串操作)和只在我的應用程序中定義的自定義操作字符串(這更容易正確編碼)。

另外,您爲Activity2指定的意圖過濾器通常用於直接從主屏幕啓動的活動。

活動2的onCreate()代碼在哪裏? onBackPressed()的代碼在哪裏?你能向我證明setResult()在Activity2中的其他代碼之前被調用嗎?您應該在調試中運行這些活動。確保Activity2正在接收你認爲它應該的意圖,然後逐步跟蹤直到setResult()之前執行的語句。 而不是要做的事情是在你明白底層問題是什麼之前,在代碼中拋出解決方案。

據我目前所知,Activity1發出一個Intent,然後onActivityResult被調用。迄今爲止沒有任何其他證明。

+0

感謝您的評論 - 我已經將'onCreate'和'onBackPressed'方法添加到問題中。我運行調試很多次,並使用斷點,我能夠顯示Activity1的'onActivityResult'在Activity2第一次啓動時被調用 - 在Activity2返回之前,並且在返回時不再被調用。 – user1205577 2012-04-09 13:59:34

+0

我也嘗試使用Intent(context,Activity2.class)創建一個intent,但它抱怨說它找不到該類(可能是因爲它在另一個應用程序中)。我嘗試了一些使用完全合格的路徑名稱的變體,這也是一個不行。 – user1205577 2012-04-09 14:02:17

1

如果在啓動活動時設置了「singleInstance」標誌,則會發生此情況。

+0

謝謝jbaylina你的回答對我有幫助 – Swapnil 2015-04-10 04:31:58