2017-01-30 52 views
1

我只是想按下「後退」按鈕,將Activity2中的對象信息交換回Activity1。 一切工作正常,除了返回Activity1 onActivityResult(..)永遠不會觸發。因此我無法訪問意向信息。有人知道爲什麼onActivityResult()onBackPressed()上沒有觸發

我檢查了這些問題的答案,但他們不工作:

setResult does not work when BACK button pressed

How to pass data from 2nd activity to 1st activity when pressed back? - android

How to pass the values from one activity to previous activity

Send data to a parent activity onBackPressed

我的代碼(如果你需要更多的,告訴我):

的AndroidManifest.xml:

 <activity 
      android:name="com.example.Activity1" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme.NoActionBar" 
      android:screenOrientation="portrait"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <activity 
      android:name="com.example.Activity2" 
      android:theme="@style/AppTheme.NoActionBar" 
      android:screenOrientation="portrait"> 
     </activity> 

Activity1.java:

public class MainActivity extends AppCompatActivity { 

    // other stuff... 

    private void showActivity2(Test test) { 
     Intent intent = new Intent(this, Activity2.class); 
     intent.putExtra("test", test.getSerializableObject()); 
     startActivityForResult(intent, Activity.RESULT_OK); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == RESULT_CANCELED) { 
      Test test = data.getExtras().getParcelable("test"); 
      // Do something... 
     } 
    } 

Activity2.java:

public class Activity2 extends AppCompatActivity { 

    // other stuff.... 

    @Override 
    public void onBackPressed() { 
     Intent intent = new Intent(); 
     intent.putExtra("test", test.getSerializableObject()); 
     setResult(Activity.RESULT_CANCELED, intent); 
     super.onBackPressed(); 
    } 
} 
+0

'onBackPressed()'最可能爲時已晚。調用'setResult()'當用戶在UI中做出正面的事情來說出他們想要的是什麼(例如,單擊列表項)。通常,你也可以調用'finish()',因爲一旦用戶決定他們想要什麼,'Activity2'就不再需要了。 – CommonsWare

+0

我也嘗試setResult(xxx),而Activity2正在更新的東西。仍然...看起來像Activity1通常忽略回調。 – Javatar

回答

4

按照在機器人文檔startActivityForResult

與調用startActivityForResult(Intent,int,Bundle)相同,沒有 選項。

intent意圖:意向開始。

requestCode int:如果> = 0,則在活動退出時,此代碼將在 onActivityResult()中返回。

你做現在這是什麼:startActivityForResult(intent, Activity.RESULT_OK);

Activity.RESULT_OK實際值-1這就是爲什麼它沒有返回結果。 當您爲結果啓動活動並在onActivityResult中過濾請求代碼時,您需要有一個有效的請求代碼。

+0

那是正確的。有趣的是,我已經在另一個上下文中正確使用了它... 'startActivityForResult(Intent.createChooser(intent,「Select Photo」),REQUEST_GALLERY);'它現在工作正常!謝謝。 – Javatar

2

你還沒有提到Activity1.java上的請求代碼,而不是你寫的Activity.RESULT_OK這是一個結果代碼。

startActivityForResult(intent, Activity.RESULT_OK); 

它應該是:

startActivityForResult(intent, REQUEST_CODE); 

REQUEST_CODE應該是最終的靜態int值。