2017-01-04 102 views
0

我試圖將數據從一個活動傳遞給另一個,但是onActivityResult沒有被觸發。通過我的MainActivity啓動活動,我可以查看圖像庫,然後用這段代碼觸發onActivityResult。onActivityResult未被觸發

Intent i = new Intent(
        Intent.ACTION_PICK, 
        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

      startActivityForResult(i, RESULT_LOAD_IMAGE); 

從另一個胡亞蓉我有這樣一段代碼

gridLayout.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Intent intent =new Intent(); 
      setResult(RESULT_OK,intent); 
      intent.setClass(getApplicationContext(), MainActivity.class); 
      intent.putExtra("someData",id); 
      finish(); 

     } 
    }); 

這也將在MainActivity調用onActivityResult就好然而,這下一行代碼不會。

gridLayout.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Intent intent = new Intent(); 
      intent.setClass(getApplicationContext(), MainActivity.class); 
      intent.putExtra("someData",id); 
      startActivityForResult(intent, 2); 
     } 
    }); 

我查看了清單文件,所有設置都正確。我已經看到人們提出了諸如將android:noHistory =「false」這樣的東西,但是我沒有在我的清單中設置這些東西。這很簡單,看起來像這樣。

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:largeHeap="true"> 

    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:theme="@style/CustomTheme" 
     > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".ImageRollActivity" 
     android:theme="@style/GridTheme" 
     android:label=" Image Roll" 
     android:parentActivityName=".MainActivity" 
     > 
    </activity> 

如果任何人有任何見識,爲什麼這不被觸發,將不勝感激!

回答

3

在第二個中,您打電話startActivityForResult()而不是setResult()(如在第一個示例中)。

調用startActivityForResult()將啓動活動,這意味着它將被重新創建並通過Activity lifecycle

setResult()是您需要它來呼叫onActivityResult()

+0

我讀過Activity生命週期之前,但從來沒有startActivityForResult。讀完那部分之後,我覺得現在問這個問題是一個白癡,但是,謝謝你的迴應! – AConsiglio

+0

沒問題。它發生:D – codeMagic