239 votes

Envoi de données à l'activité principale dans Android

<p>J’ai deux activités. Activité principale et activité enfant. Lorsque j’appuie sur un bouton, l’activité enfant est lancée maintenant, je n’ai aucun problème. Je veux envoyer des données à l’écran principal. J’ai utilisé le Bundle classe mais il ne fonctionne pas. Elle lève quelques run exception moment est-il une solution ? Quelqu'un connaît la réponse s’il vous plaît dites-moi.</p>

408voto

Reto Meier Points 55904

Il ya un couple de façons d'obtenir ce que vous voulez, selon les circonstances.

Le scénario le plus courant (ce qui est le vôtre ressemble), c'est quand un enfant Activité est utilisée pour obtenir la saisie de l'utilisateur (comme le choix d'un contact à partir d'une liste ou d'entrer des données dans une boîte de dialogue. Dans ce cas, vous devez utiliser startActivityForResult pour le lancement de votre Activité enfant.

Cela fournit un pipeline pour l'envoi de données de retour à l'Activité principale à l'aide de setResult. La méthode setResult prend un int valeur de résultat et une Intention qui est passé à l'appel de l'Activité.

Intent resultIntent = new Intent();
// TODO Add extras or a data URI to this intent as appropriate.
setResult(Activity.RESULT_OK, resultIntent);
finish();

Pour accéder aux données renvoyées dans l'appel de l'Activité de remplacer onActivityResult. Le requestCode correspond à l'entier passé dans l' startActivityForResult appel, tandis que le resultCode de données et l'Intention sont renvoyées à partir de l'Activité de l'enfant.

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  switch(requestCode) {
    case (MY_CHILD_ACTIVITY) : {
      if (resultCode == Activity.RESULT_OK) {
        // TODO Extract the data returned from the child Activity.
      }
      break;
    } 
  }
}

162voto

jimmithy Points 2929

Activité 1 utilise startActivityForResult:

startActivityForResult( ActivityTwo, ActivityTwoRequestCode)

Activité 2 est lancé et vous pouvez effectuer l'opération, de fermer l'Activité de ce faire:

Intent output = new Intent();
output.putExtra(ActivityOne.Number1Code, num1);
output.putExtra(ActivityOne.Number2Code, num2);
setResult(RESULT_OK, output);
finish();

Activité 1 - le retour de l'activité précédente appellera onActivityResult:

onActivityResult (int requestCode, int resultCode, Intent data) 
if (requestCode == ActivityTwoRequestCode && resultCode == RESULT_OK && data != null)
num1 = data.getIntExtra(Number1Code);
num2 = data.getIntExtra(Number2Code);

EDIT: Dans l'activité de deux,

int result = Integer.parse(EditText1.getText().toString()) 
           + Integer.parse(EditText2.getText().toString());
output.putExtra(ActivityOne.KEY_RESULT, result);

Puis, en activité,

int result = data.getExtra(KEY_RESULT);

15voto

Intrications Points 8182
<p>Appeler l’activité enfant intention à l’aide de l’appel de méthode startActivityForResult()</p> <p>Il y a un exemple de ce ici : <a href="http://developer.android.com/training/notepad/notepad-ex2.html">http://developer.android.com/training/notepad/notepad-ex2.html</a></p> <p>et dans le « retourner un résultat d’un écran » de cela : <a href="http://developer.android.com/guide/faq/commontasks.html#opennewscreen">http://developer.android.com/guide/faq/commontasks.html#opennewscreen</a></p>

0voto

<p>Utiliser <strong>sharedPreferences</strong> et sauvegarder vos données et y accéder depuis n’importe où dans l’application<p>Enregistrez la date comme ceci</p><pre><code></code></pre><p>Et recevoir des données comme ça</p><pre><code></code></pre></p>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: