0

Ich habe Aktivität A und B. Wenn ich auf Aktivität B bin und eine Aktion ausgelöst wird, rufe ich Aktivität A. In Aktivität B verwende ich startActivityforResult, Überprüfung der Anfrage Code auf Aktivitätsergebnis und Anzeigen des Alarmdialogfelds auf der Benutzeroberfläche, nachdem Aktivität A aufgerufen wurde. Aber mein onActivityresult wird nicht aufgerufen und daher mein Dialogfeld.onActivityforResult wird nicht ausgelöst/aufgerufen

Unten ist mein Code-Schnipsel.

public void Logout() { 
     autoLogoutHandler.removeMessages(MSG_APP_LOGOUT); 
     Intent intent = new Intent(Activity_B.this, 
       Activity_A.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivityForResult(intent, OPEN_NEW_ACTIVITY); 
    } 

Und mein onActivityResult ich meine Bitte Code überprüft, aber es nie genannt.

@Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      if (requestCode == OPEN_NEW_ACTIVITY) { 
       alert = new AlertDialog.Builder(getBaseContext()) 
         .setTitle(null) 
         .setMessage(getString(xxxx)) 
         .setIcon(null) 
         .setPositiveButton(getString(xxxx), new DialogInterface.OnClickListener() { 

          public void onClick(DialogInterface dialog, int whichButton) { 


          } 
         }).show(); 
      } 
    } 

Kann mir jemand helfen, warum meine onActivityResult nicht aufgerufen wird?

+0

Ist Ihr 'onActivityResult' auf ACTIVITYB oder ACTIVITYA? –

+0

Es ist Aktivität B. – DroidDev

+0

Warum verwenden Sie 'intent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP);'? Wird ActivityA irgendwann vor ActivityB initiiert? – rubenlop

Antwort

0

Ihr fließt derzeit

A -> opens -> B -> start onActivityResult -> A // doesn't work

Was Sie stattdessen tun sollten:

A- > start onActivityResult -> B -> setResult() & finish() -> A -> handles onActivityResult -> voila!

Aktivität Ein Anruf & Warten auf Aktivität B, nach dieser Aktivität Prozess ist es Informationen dann muss zurückgegeben werden, ob das Ergebnis der Operation erfolgreich war RESULT_OK oder fehlgeschlagen/abgebrochen RESULT_CANCELED.

Nachdem die Aktivität B schließt, wird die Aktivität A die onActivityResult Verfahren durchführen, und als Best Practice, werden Sie überprüfen, welche requestCode vom startActivityForResult und dann prüfen, ob die Operation erfolgreich war oder nicht ...

genannt wurde
@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
if (requestCode == 1) { 
    if (resultCode == RESULT_OK) { 
     // do work if successful 
    } 
} 
... 

undestanding onActivityResult gemäß Dokumentation: https://developer.android.com/training/basics/intents/result.html

+0

So rufe ich meine Activity_B an. Wenn ich auf Activity_B bin, habe ich verschiedene Fragmente darin .. Von einem der Frag ich logge mich aus der App zu Activity_A (Login-Bildschirm). Ich möchte startactivityForResult nicht verwenden, wenn ich von Activity_A nach Activity_B gehe, da es keine Ergebnisüberprüfung gibt. public void Activity_B() { Absicht intent = neue Absicht (Activity_A, Activity_B.class); intent.setFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra ("tabIndex", 0); startActivity (Absicht); } – DroidDev

+0

Die startActivity für diese Methode sollte ersetzt werden durch 'startActivityForResult (Absicht, Code)' –

+0

Es hilft nicht. – DroidDev