Comment utiliser StartActivityForResult()
Dans mon application, j'ai besoin de demander à l'utilisateur un rapide input
.
J'ai besoin d'obtenir un résultat de ce Flash-Activité et puis revenir à la précédente.
J'ai lu sur le StartActivityForResult()
méthode, mais je ne suis pas encore sûr de savoir comment l'utiliser correctement, des exemples?
EDIT:
J'ai essayé de passer le Joueur de l'objet via intention (à la suite) à l'aide de la méthode que j'ai utilisé dans tous les app appliqué à cette méthode de la StartActivityForResult():
Dans ma deuxième Activité (celui où j'ai besoin d'obtenir le même résultat à partir de):
Intent intent = new Intent();
Player playerKilled = players.get(position);
Bundle bundle = new Bundle();
bundle.putSerializable("PLAYER_KILLED", (Serializable) playerKilled);
intent.putExtras(bundle);
setResult(Activity.RESULT_OK, intent);
finish();
Mon Activité Principale où j'ai besoin pour prendre la suite de:
if (resultCode == Activity.RESULT_OK) {
Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();
playerKilled = (Player)bundle.getSerializable("PLAYER_KILLED");
Toast.makeText(this, playerKilled.getName() + "the " + playerKilled.getCardName() + " has died, and he/she had the ID: " + playerKilled.getId(), Toast.LENGTH_SHORT).show();
- Est-il un problème ici ou demandez-vous pour la conception d'un avis sur votre propre application? Si le plus tard, c'est hors sujet pour StackOverflow
- Envisager de déplacer cette question de la revue de code du site.
- Nan, je me demande comment faire pour faire une sorte de pop-up windows, je veux dire, une activité qui ne marche pas faire perdre le focus sur tha activité principale (la Liste). Le code est juste pour vous aider. Si vous avez besoin de regarder de plus près, ne demandant pas un examen. @MrD
- Ouais c'est @cricket_007 Comment faire de tel.. "activité"
- Pourrait vouloir reformuler la question dans ce cas
- Est un dialogue approprié? Sinon, vous pouvez lancer une activité qui ressemble à une boîte de dialogue?
- Pourquoi ne pas simplement créer une simple boîte de dialogue qui vous montrent à l'intérieur de cette même activité?
- Serait qui fit une liste à droite? @Eenvincible
- Je ne suis pas sûr de ce que vous demandez exactement. Voulez-vous l'entrée à partir de la boîte de dialogue, parce que vous avez mentionné que vous ne voulez pas perdre de vue l'objectif de l'activité principale? Qu'entendez-vous par ce - voulez-vous toujours être en mesure d'accéder à l'activité de l'
ListView
(comme vous l'avez mentionné), alors que vous demandez pour une entrée? - Je suis désolé, je ne sait toujours pas la StartActivityForResult() la méthode quand j'ai posé cette question, maintenant je sais ma question est de savoir comment l'utiliser correctement pour démarrer une autre Activité et obtenir un résultat de celui-ci (le nom d'un Joueur de l'objet à l'intérieur de notre RecyclerView). J'ai juste besoin de savoir comment utiliser cette méthode, je sais comment obtenir ce que je veux, mais je ne sais pas comment l'envoyer en utilisant cette méthode @FarbodSalamat-Zadeh
- Donc, je suppose que vous voulez l'activité principale de lancer une deuxième activité avec le
RecyclerView
(à partir de votre précédente question), et puis quand un élément est cliqué, il renvoie le résultat de l'activité principale. - Droit à l'essentiel 😉 @FarbodSalamat-Zadeh
Vous devez vous connecter pour publier un commentaire.
Vous pouvez demander la saisie de l'utilisateur dans un certain nombre de façons, mais si vous souhaitez utiliser un nouveau
Activity
, comme vous l'avez mentionné, nous pouvons utiliserstartActivityForResult()
pour le lancement d'une nouvelle activité et retour à l'entrée à partir de là.Tout d'abord, je vous recommande fortement la lecture à travers ce Débordement de Pile répondre sur la façon d'utiliser
startActivityForResult()
. Je vais vous expliquer comment vous pouvez l'appliquer à votre cas d'utilisation spécifiques.Donc, vous devez comprendre que
startActivityForResult()
dispose de deux paramètres:Intent
(qui permet de passer des données entre les activités)Il est de bonne pratique d'utiliser une constante pour votre demande de code que vous pouvez accéder à tous les deux activités. Par exemple, dans votre activité principale, vous pouvez ajouter:
Ce serait accessible dans les deux activités, car il est
public
, et cela fonctionne pour une demande de code car c'est unint
(entier).Dans votre activité principale, vous avez besoin d'une action (comme appuyer sur un bouton) pour démarrer votre deuxième activité. Imaginons qu'il est à un clic sur un bouton qui déclenche cette action:
Fondamentalement, nous créons un
Intent
qui spécifie notre activité actuelle (this
) et de la deuxième activité. Nous avons l'intention dans lestartActivityForResult()
méthode avec leREQUEST_CODE
nous avons déclaré plus tôt.Maintenant, dans notre deuxième activité, nous avons besoin de quelque chose pour déclencher les données retournées. De la question précédente vous a demandé, je suis en supposant que vous souhaitez que les données soient retournés à l'activité principale lorsqu'un
RecyclerView
article a été cliqué. Voici une partie de ma réponse à cette question modifiée afin de montrer comment les données seront envoyées en arrière.Ci-dessus renvoie la position de l'élément de la liste à partir de la
RecyclerView
cliqué.Ont un look à la
Intent
'sputExtra()
méthode. C'est ce qui transmet les données. Vous pouvez voir que j'ai passé une Chaîne"pos"
et la variable de l'élémentposition
dans cette méthode, mais pourquoi:La
putExtra
méthode deIntent
s utilisez toujours une clé de Chaîne et un autre objet, tel que votre variable de type entier,position
. La clé sera de nouveau utilisé lors de la récupération de cet objet (que je vous montrerai plus tard).Nous utilisons
Activity.RESULT_OK
- à-dire que l'on passe à la suite, mais vous pouvez utiliserActivity.RESULT_CANCELED
si vous ne voulez pas retourner un résultat, ce qui est expliqué dans la réponse de lien je l'ai mentionné au début. Notez que si vous utilisezActivity.RESULT_CANCELED
, vous n'auriez pas besoin d'utiliserputExtra
qu'il n'y aurait rien à envoyer.Enfin, vous devez ajouter quelque chose dans votre activité principale, qui infligera avec la réception des résultats à partir de votre deuxième activité:
Nous utilisons le
onActivityResult
méthode pour cela.Au début de cette méthode, nous allons vérifier pour voir si le
requestCode
est la même que celle que nous avons définie plus haut (comme une constante publique,REQUEST_CODE
).Si oui, nous continuons et vérifier pour voir ce que le
resultCode
des résultats. Si les données ont été envoyées à l'arrière (Activity.RESULT_OK
), nous pouvons le récupérer à l'aide degetIntExtra()
comme leposition
est un entier (de la même manière, l'utilisationgetStringExtra()
si vous êtes de retour d'une Chaîne). Ensuite, vous pouvez faire quelque chose avec les données renvoyées. Toutefois, si les données n'a pas été envoyé à l'arrière (comme nous l'avons mentionné plus tôt avecActivity.RESULT_CANCELED
), vous pouvez faire autre chose.J'espère que cela vous aide à la mise en œuvre de votre idée, mais une recherche Google aurait déjà trouvé la réponse je l'ai mentionné ci-dessus (voici de nouveau le lien) qui explique clairement comment utiliser
startActivityForResult()
. D'autres réponses à cette question aussi expliquer bien, mais peut-être vous avez besoin de conseils sur la façon de l'appliquer dans votre cas d'utilisation (c'est à dire combiné avec votre code à partir de la question précédente, vous avez eu), c'est pourquoi j'ai fourni l'explication ci-dessus.Vous pouvez également lire les Android documentation sur l'Obtention d'un Résultat à partir d'une Activité ainsi que Android documentation de l' [
startActivityForResult()
méthode](https://developer.android.com/reference/android/app/Activity.html#startActivityForResult(android.content.Intent, int)) etIntention
s.Player
objet de mettre en œuvreParcelable
au lieu d'utiliserSerializable
. Il y a une bonne réponse en expliquant comment le faire ici. Après la modification de votrePlayer
objet de cette façon, je voudrais utiliserputParcelable("PLAYER_KILLED", playerKilled)
- vous ne devriez pas avoir à le jeter à rien ici. De même, dans votre activité principale, vous pouvez utilisergetParcelable
au lieu degetSerializable
. Il y a le documentation officielle pour ce ainsi.MainActivity
, mais va sûrement essayer de mettre en œuvre laParcelable
dans les futures mises à jour comme je l'ai entendu c'est mieux queSerializable
dans certains casSi je comprends votre question correctement, je suis persuadé que vous voulez de cette solution:
il suffit de créer votre activité avec une liste d'éléments (recyclerview?) alors pour commencer afin d'obtenir les résultats, en gros, vous créez votre intention et d'appeler la méthode ci-dessus.
Maintenant, après que vous êtes dans la liste de l'activité, il suffit de faire les opérations suivantes lorsqu'un utilisateur a sélectionné l'élément:
Donc, immédiatement, un utilisateur clique sur un élément de la liste, vous pouvez utiliser ce code pour transmettre votre valeur et fermer la liste de l'activité.
Enfin, pour recevoir cette valeur transmise, il vous suffit de Remplacer
onActivityResult()
C'est tout ce dont vous avez besoin! Je dirais que la création d'une activité est tout à fait bien, même si elle n'a qu'une seule chose - affiche une liste d'articles! J'espère que cela vous aide! Bonne chance et amusez-vous!
Ce que vous pouvez faire est de la pop, une activité qui ressemble à une boîte de dialogue.
Dans le manifeste, où vous déclarer l'activité, inclure une boîte de dialogue thème:
Alors appel à l'activité de la voie normale vous, avec un résultat si vous le souhaitez:
SharedPreferences
pour beaucoup de choses. Mais vous de retour à l'activité dansonActivityResult
où vous pouvez traiter tout ce que vous passé à partir de la boîte de dialogue de l'activité dans un autreintent
.ListView