1

Ich weiß nicht, wie ich diese Frage formulieren soll.Wie kommt es manchmal, wenn ich den Zurück-Knopf drücke, gibt es mehr Aktivitäten, als es sein sollte?

Meine App hat einen einfachen ViewPager und Sie klicken auf etwas in einer dieser Seitenfragmente und es bringt Sie zu einer anderen Aktivität. Drücken Sie die Zurück-Taste und Sie gelangen zurück zum ViewPager. Drücken Sie erneut und die App wird geschlossen.

Aber manchmal, wenn ich die Zurück-Taste am ViewPager drücke, bringt es mich zurück zur anderen Aktivität, dann drücke ich zurück und es bringt mich zum ViewPager, und so weiter, bis die App endlich schließt. Mit anderen Worten, es ist, als ob es übrig gebliebene Instanzen des ViewPagers oder der anderen Aktivität im Backstack gibt (ich glaube, es heißt), aber ich habe keine Ahnung, wie oder warum das passiert.

Ich weiß auch nicht, wie man den Fehler reproduziert, der noch frustrierender ist. Die meiste Zeit funktioniert es wie erwartet, aber manchmal tauchen die übriggebliebenen Instanzen einfach aus dem Nichts auf, wenn ich zurück drücke.

Wie kann ich besser garantieren, dass wenn ich die Zurück-Taste der anderen Aktivität drücke, es zurück zum ViewPager geht, und wenn ich den ViewPager zurück drücke, schließt es die App?

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: //called when I press back button on the phone or the back-arrow on the toolbar 
      onBackPressed(); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

//and then usually that's all I have, but in one particular Activity, I do override the function: 

@Override 
public void onBackPressed() { 
    if (some conditions are met) { 
     finish(); 
     super.onBackPressed(); 
    } 
    else { 
     //display some error message 
    } 
} 

Hier ist, wie ich meine Aktivitäten starten:

public void launchSomeActivity() { 
    Intent intent = new Intent(getActivity(), ActivityName.class); 
    intent.putExtra(etc etc etc); 
    startActivityForResult(intent, REQUEST_CODE); 
} 
+0

Sie rufen 'finish()', wenn Sie neue Aktivitäten starten? –

+0

Ich habe Code zum Beitrag hinzugefügt –

+1

FInish() und super.onBackPress() sind die gleichen verwenden Sie eine dieser Methoden. – ramji

Antwort

1

wahrscheinlich, dass Sie einen bösen langjährigen Android Bug sehen. Wenn Sie Ihre App zum ersten Mal von einer IDE oder vom Installationsprogramm aus starten, erstellt Android eine weitere Instanz Ihrer Root-Aktivität, wenn Sie die App in den Hintergrund stellen und erneut über den Startbildschirm starten. Dies würde genau das Verhalten zeigen, das Sie melden. Wenn Sie die App zum ersten Mal starten, indem Sie auf dem Startbildschirm (oder in der Liste der verfügbaren Apps) auf das App-Symbol klicken, tritt das Problem nicht auf.

Siehe Re-launch of Activity on Home button, but...only the first time

Verwandte Themen