Je souhaite terminer une activité à partir d'une autre activité, comme:
Dans l'activité [A], en cliquant sur le bouton, j'appelle l'activité [B] sans terminer l'activité [A].
Maintenant, dans l'activité [B], il y a deux boutons, Nouveau et Modifier . Lorsque l'utilisateur clique sur modifier puis pop une activité [A] de la pile avec toutes les options cochées.
Mais quand l'utilisateur clique sur le bouton Nouveau de l'activité [B], alors je devrai terminer l'activité [A] de la pile et recharger cette activité [A] à nouveau dans la pile.
J'essaye, mais je ne parviens pas à terminer l'activité [A] de la pile ... Comment puis-je le faire?
J'utilise le code comme:
De l'activité [A]:
Intent GotoB = new Intent(A.this,B.class);
startActivityForResult(GotoB,1);
Une autre méthode dans la même activité
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 1)
{
if (resultCode == 1) {
Intent i = getIntent();
overridePendingTransition(0, 0);
i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
overridePendingTransition(0, 0);
startActivity(i);
}
}
}
Et dans l'activité [B], cliquez sur le bouton:
setResult(1);
finish();
Réponses:
Faites votre activité A dans le fichier manifeste:
launchMode = "singleInstance"
Lorsque l'utilisateur clique sur nouveau, faites
FirstActivity.fa.finish();
et appelez la nouvelle intention.Lorsque l'utilisateur clique sur Modifier, appelez la nouvelle intention ou terminez simplement l'activité B.
PREMIÈRE FAÇON
Dans votre première activité, déclarez-en une
Activity object
comme celle-ci,utilisez maintenant cet objet dans un autre
Activity
pour terminer la première activité comme celle-ci,DEUXIÈME VOIE
Lorsque vous appelez votre activité
FirstActivity
que vous souhaitez terminer dès que vous passez, vous pouvez ajouter un indicateur lors de l'appelFirstActivity
Mais en utilisant cet indicateur, l'activité sera terminée même si vous ne le souhaitez pas. et parfois,
onBack
si vous voulez montrer le,FirstActivity
vous devrez l'appeler en utilisant l'intention.la source
Vous pouvez le faire, mais je pense que vous ne devriez pas briser le flux normal de l'activité. Si vous souhaitez terminer votre activité, vous pouvez simplement envoyer une diffusion de votre activité B vers l'activité A.
Créez un récepteur de diffusion avant de démarrer votre activité B:
Envoyez la diffusion de l'activité B à l'activité A lorsque vous souhaitez terminer l'activité A à partir de B
J'espère que cela fonctionnera pour vous ...
la source
broadcast_receiver
unregisterReceiver()
C'est une question de communication assez standard. Une approche serait d'utiliser un ResultReceiver dans l'activité A:
puis dans l'activité B, vous pouvez simplement le terminer à la demande comme ceci:
Essayez quelque chose comme ça.
la source
Il existe une approche que vous pouvez utiliser dans votre cas.
Étape 1: Démarrez l'activité B à partir de l'activité A
Étape 2: Si l'utilisateur clique sur le bouton Modifier, lancez l'activité A en utilisant le
FLAG_ACTIVITY_CLEAR_TOP
.Aussi, passez le drapeau en extra.Étape 3: Si l'utilisateur clique sur le bouton Ajouter, lancez l'activité A en utilisant le
FLAG_ACTIVITY_CLEAR_TOP
.Also, passez l'indicateur en extra.FLAG_ACTIVITY_CLEAR_TOP
effacera toutes les activités ouvertes jusqu'à la cible et redémarrera si aucun mode de lancement n'est défini dans l'activité cibleÉtape 4: Maintenant,
onCreate()
méthode de l'activité A, vous devez récupérer cet indicateur.la source
Démarrez votre activité avec le code de demande:
Et vous pouvez le fermer de toute autre activité comme celle-ci:
la source
Voir ma réponse à la question de Stack Overflow Terminer Toutes les activités précédentes .
Ce dont vous avez besoin est d'ajouter le fichier
Intent.FLAG_CLEAR_TOP
. Cet indicateur garantit que toutes les activités au-dessus de l'activité ciblée dans la pile sont terminées et que celle-ci est affichée.Une autre chose dont vous avez besoin est le
SINGLE_TOP
drapeau. Avec celui-ci, vous empêchez Android de créer une nouvelle activité s'il y en a déjà une dans la pile.Sachez simplement que si l'activité a déjà été créée, l'intention avec ces indicateurs sera fournie dans la méthode appelée
onNewIntent(intent)
(vous devez la surcharger pour la gérer) dans l'activité cible.Ensuite,
onNewIntent
vous avez une méthode appelée redémarrage ou quelque chose qui appellerafinish()
et lancera une nouvelle intention vers lui-même, ou unerepopulate()
méthode qui définira les nouvelles données. Je préfère la deuxième approche, elle est moins chère et vous pouvez toujours extraire laonCreate
logique dans une méthode distincte que vous pouvez appeler pour peupler.la source
Je viens d'appliquer la solution de Nepster et fonctionne comme un charme. Il y a une modification mineure pour l'exécuter à partir d'un fragment.
À votre fragment
Et à votre OnNewIntent () de l'activité que vous souhaitez redémarrer.
la source
Je pense que j'ai l'approche la plus simple ... en appuyant sur nouveau dans B ..
et en A l'obtenir
la source
Je sais que c'est une vieille question, certaines de ces méthodes ne fonctionnaient pas pour moi, donc pour ceux qui cherchent dans l'avenir ou qui ont mes problèmes, cela a fonctionné pour moi
J'ai remplacé
onPause
et appelé à l'finish()
intérieur de cette méthode.la source
Premier appel
startactivity()
puis utilisationfinish()
la source