Dis que je suis sur mon activité principale et que je commence une nouvelle activité
MainActivity > NewActivity
Et depuis NewActivity
j'appuie sur la touche retour
MainActivity < NewActivity
Je veux que MainActivity
fasse quelque chose s'il est affiché après la fermeture de NewActivity
, mais pas lorsque MainActivity
est exécuté normalement, comme lors de la première exécution de l'application. Est-ce que quelqu'un sait si c'est possible?
Quelques idées:
MainActivity
lorsqu'il se déclenche NewActivity
.startActivityForResult
depuis MainActivity
et faire en sorte que NewActivity
définisse un résultat, que vous recevrez dans MainActivity.onActivityResult()
lorsque NewActivity
se terminera .@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
Log.d(this.getClass().getName(), "back button pressed");
}
return super.onKeyDown(keyCode, event);
}
@Mettre à jour. Si vous souhaitez être averti lorsque NewActivity est terminé, vous devez le démarrer par startActivityForResult (Intent, requestCode). Ensuite, vous devez remplacer onActivityResult () sur MainActivity. Vérifiez le paramètre requestcode ici, si le code retour est égal au code de soumission (lorsque vous démarrez childActivity), mettez du code pour faire votre affaire.
int MYCODE=1000;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Result OK.d.
if (requestCode == MYCODE) {
// do something good
}
}
J'essaie la méthode ci-dessous pour détecter le bouton de retour enfoncé sur la barre d'action en activité par la première méthode et la seconde est utilisée pour détecter le bouton de matériel mobile en arrière ou tuer le bouton d'activité.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case Android.R.id.home:
onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onBackPressed() {
setResult(RESULT_CANCELED);
super.onBackPressed();
}
Vous pouvez remplacer la méthode onBackPressed () dans NewActivity qui détectera lorsque le bouton de retour est enfoncé. Et puis pour en informer MainActivity à ce sujet, vous pouvez envoyer un drapeau booléen dans un bundle afin que MainActivity ne détecte que son ouverture après NewActivity.
Dans NewActivity:
@Override
public void onBackPressed() {
boolean fromNewActivity=true;
Intent mainIntent = new Intent(view.getContext(), MainActivity.class);
Bundle bundleObj = new Bundle();
bundleObj.putString("fromNewActivity", Boolean.toString(fromNewActivity));
mainIntent.putExtras(bundleObj);
startActivityForResult(mainIntent, 0);
}
Dans MainActivity dans la méthode onCreate ():
Bundle extras = getIntent().getExtras();
boolean fromNewActivity =Boolean.parseBoolean( extras.getString("fromNewActivity"));
Vous pouvez maintenant vérifier si la MainActivity est ouverte après NewActivity ou non.
Lorsque vous démarrez NewActivity
, vous devez utiliser startActivityForResult
et utiliser un requestId
valide. Ce requestId
vous sera renvoyé à onActivityResult
une fois que NewActivity
sera terminé.