94 votes

Comment passer des valeurs d'une activité à une activité précédente

Comment puis-je passer d'une valeur à partir d'un écran à son écran précédent?

Considérons cet exemple: j'ai deux activités. Le premier écran a un TextView et un bouton, et la deuxième activité a un EditText et un bouton.

Si je clique sur le premier bouton, puis il doit passer à la deuxième activité, et ici, l'utilisateur doit saisir quelque chose dans la zone de texte. Si il appuie sur le bouton à partir de la deuxième écran, puis les valeurs de la zone de texte doit passer à la première activité et qui doit être affiché dans la première activité TextView.

226voto

Reto Meier Points 55904

Pour capturer les actions effectuées sur une Activité dans un autre nécessite trois étapes.

Lancement de l'Activité secondaire (votre "Modifier le Texte" de l'Activité) comme une sous-activité en utilisant startActivityForResult de votre Activité principale.

Intent i = new Intent(this,TextEntryActivity.class);    
startActivityForResult(i, STATIC_INTEGER_VALUE);

Au sein de la sous-activité, plutôt que de simplement fermer l'Activité lorsqu'un utilisateur clique sur le bouton, vous devez créer une nouvelle Intention et inclure le texte saisi de la valeur dans son bundle extras. À transmettre au parent d'appel setResult avant d'appeler finish pour fermer l'Activité secondaire.

resultIntent = new Intent(null);
resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, enteredTextValue);
setResult(Activity.RESULT_OK, resultIntent);
finish();

La dernière étape consiste en l'appelant Activité, substituer onActivityResult pour écouter les rappels à partir de l'entrée de texte Activité. Obtenir le plus depuis le retour de l'Intention d'obtenir la valeur de texte vous devriez être à l'affichage.

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) {     
  super.onActivityResult(requestCode, resultCode, data); 
  switch(requestCode) { 
    case (STATIC_INTEGER_VALUE) : { 
      if (resultCode == Activity.RESULT_OK) { 
      String newText = data.getStringExtra(PUBLIC_STATIC_STRING_IDENTIFIER);
      // TODO Update your TextView.
      } 
      break; 
    } 
  } 
}

10voto

Nikhil Agrawal Points 3687

Il existe quelques façons dont vous pouvez accéder à des variables ou de l'objet dans d'autres classes ou de l'Activité.

A. Base De Données

B. partagé préférences.

C. sérialisation d'un Objet.

D. Une classe qui peut contenir des données communes peut être nommé en tant que Utilitaires cela dépend de vous.

E. la transmission des données par le biais d'Intentions et de l'Interface Parcelable.

Elle dépendra besoins de votre projet.

A. Base De Données

SQLite est une Base de données Open Source qui est intégré dans Android. SQLite prend en charge la norme de base de données relationnelle fonctionnalités comme la syntaxe SQL, des opérations et déclarations préparées à l'avance.

Tutoriels -- http://www.vogella.com/articles/AndroidSQLite/article.html

B. Partagé Préférences

Supposons que vous souhaitez stocker le nom d'utilisateur. Donc, il y aura maintenant deux chose une Clé nom d'utilisateur, la Valeur de la Valeur.

Comment stocker

 // Create object of SharedPreferences.
 SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
 //now get Editor
 SharedPreferences.Editor editor = sharedPref.edit();
 //put your value
 editor.putString("userName", "stackoverlow");

 //commits your edits
 editor.commit();

À l'aide de putString(),putBoolean(),putInt(),putFloat(),putLong (), vous pouvez enregistrer votre choix dtatype.

Comment faire pour récupérer

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
String userName = sharedPref.getString("userName", "Not Available");

http://developer.android.com/reference/android/content/SharedPreferences.html

C. Sérialisation D'Un Objet

Objet serlization est utilisé si l'on veux enregistrer un état de l'objet de l'envoyer sur le réseau, ou vous pouvez l'utiliser pour votre usage.

Utiliser java beans et de les stocker dans un de ses champs et de l'utilisation des getters et setter pour que

Les JavaBeans sont des classes Java qui ont des propriétés. Pensez propriétés privées variables d'instance. Depuis qu'ils sont privés, la seule façon ils peuvent être accessibles à partir de l'extérieur de leur classe par le biais de méthodes dans la classe. L' méthodes de modifier une valeur de la propriété sont appelées des méthodes de définition, et les méthodes récupérer une valeur de la propriété sont appelées des méthodes de lecture.

public class VariableStorage implements Serializable  {

    private String inString ;

    public String getInString() {
        return inString;
    }

    public void setInString(String inString) {
        this.inString = inString;
    }


}

Définir la variable dans vous mail, en utilisant la méthode

VariableStorage variableStorage = new VariableStorage();
variableStorage.setInString(inString);

Utilisez ensuite l'objet Serialzation de sérialiser et dans d'autres classe désérialiser cet objet.

Dans la sérialisation d'un objet peut être représenté comme une séquence d'octets qui comprend les données de l'objet ainsi que des informations sur le type de l'objet et les types de données stockées dans l'objet.

Après un objet sérialisé a été écrit dans un fichier, il peut être lu à partir du fichier et désérialisé qui est, le type d'informations et d'octets qui représentent l'objet et ses données peuvent être utilisées pour recréer l'objet en mémoire.

Si vous voulez un tutoriel pour cela reportez-vous à ce lien

http://javawithswaranga.blogspot.in/2011/08/serialization-in-java.html

Obtenez variable dans d'autres classes

D. CommonUtilities

Vous pouvez faire une classe par votre auto qui peut contenir les données qui vous avez souvent besoin dans votre projet.

Exemple

public class CommonUtilities {

    public static String className = "CommonUtilities";

}

E. la transmission des Données par les Intentions

Veuillez consulter ce tutoriel pour cette option de transmission de données.

http://shri.blog.kraya.co.uk/2010/04/26/android-parcel-data-to-pass-between-activities-using-parcelable-classes/

5voto

AndroidUsr Points 309

vous n'avez pas à ..

Il suffit d'appeler newIntenet () à partir de la deuxième activité

 Intent retData=new Intent();
 

Ajouter des données à renvoyer

 putExtras (retData.putExtra("userName", getUsrName()));
 

aller de l'avant avec setResult

 setResult(RESULT_OK, retData);
 

et peut ensuite finir

 finish();
 

4voto

Will Points 5662

startActivityForResult ()

Et voici un lien du SDK avec plus d'informations:

http://developer.android.com/guide/appendix/faq/commontasks.html#opennewscreen

et faites défiler jusqu'à la partie intitulée "Renvoyer un résultat à partir d'un écran"

2voto

Ohad Aloni Points 59

J'utilise souvent des variables statiques dans l'activité d'appel avec des méthodes de définition statiques pour les définir.

De cette manière, je peux changer les valeurs de n'importe quelle activité à volonté, quel que soit le flux de contrôle exact entre les différentes activités.

Notez que cette astuce ne peut être utilisée que si vous ne vous souciez pas de l’instanciation de plusieurs copies de la même activité (classe) dans l’application, mais j’ai trouvé que c’était la plus facile à implémenter et que je l’utilisais le plus souvent. .

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: