2017-01-30 10 views
1

Ich möchte nur Objektinformationen von Activity2 zurück zu Activity1 austauschen, wenn die Schaltfläche "Zurück" gedrückt wird. Alles funktioniert gut, außer zurück in Activity1 onActivityResult(..) wird nie ausgelöst. Daher kann ich nicht auf die Absicht Informationen zugreifen. Wer weiß warum? nichtonActivityResult() nicht ausgelöst onBackPressed()

checkte ich diese Antworten, aber sie funktionieren: Mein Code

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

(wenn Sie mehr benötigen, sagen ich):

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()' ist wahrscheinlich zu spät. Rufen Sie 'setResult()' auf, wenn der Benutzer in der Benutzeroberfläche etwas Positives tut, um zu sagen, was er möchte (z. B. auf das Listenelement klickt). In der Regel ruft man dann auch 'finish()' auf, da, sobald der Benutzer entschieden hat, was er will, 'Activity2' nicht mehr benötigt wird. – CommonsWare

+0

Ich habe auch versucht SetResult (xxx) während Activity2 etwas aktualisiert. Trotzdem ... sieht es so aus, als würde Activity1 den Callback ignorieren. – Javatar

Antwort

4

Wie pro Dokumentation in Android für startActivityForResult

Wie Aufruf von startActivityForResult (Intent, int, Bundle) ohne Optionen.

Absicht Intent: Die Absicht zu starten.

requestCode int: Wenn> = 0, wird dieser Code in onActivityResult(), wenn die Aktivität Ausfahrten zurückgeschickt werden.

Nun, was Sie getan haben, ist dies: startActivityForResult(intent, Activity.RESULT_OK);

Wo Activity.RESULT_OK Istwert -1, deshalb ist es nicht das Ergebnis zurück. Sie müssen einen gültigen Anforderungscode haben, wenn Sie eine Aktivität für das Ergebnis starten und dann den Anforderungscode in Ihrer onActivityResult filtern.

+0

Das ist richtig. Lustig, dass ich es schon in einem anderen Kontext richtig benutzt habe ... 'startActivityForResult (Intent.createChooser (intent," Wähle Foto "), REQUEST_GALLERY);' Es funktioniert jetzt richtig! Danke. – Javatar

2

Sie haben den Anforderungscode für Activity1.java nicht erwähnt, stattdessen haben Sie Activity.RESULT_OK geschrieben, was ein Ergebniscode ist.

startActivityForResult(intent, Activity.RESULT_OK); 

es sein sollte:

startActivityForResult(intent, REQUEST_CODE); 

REQUEST_CODE sollte ein final static int Wert sein.

Verwandte Themen