web-dev-qa-db-fra.com

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

Comment passer d'une valeur d'un écran à son écran précédent?

Considérez ce cas: j'ai deux activités. Le premier écran a une TextView et un bouton et la deuxième activité a une EditText et un bouton. 

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

94
Kumar

Pour capturer des actions effectuées sur une activité dans une autre, il faut trois étapes.

Lancez l'activité secondaire (votre activité 'Éditer le texte') en tant que sous-activité en utilisant startActivityForResult à partir 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 la valeur de texte saisie dans son ensemble d'extras. Pour le renvoyer à l'appel parent setResult avant d'appeler finish pour fermer l'activité secondaire.

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

La dernière étape consiste dans l'activité appelante: remplacez onActivityResult pour écouter les rappels de l'activité de saisie de texte. Obtenez l’extra de l’intention renvoyée pour obtenir la valeur de texte que vous devriez afficher.

@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; 
    } 
  } 
} 
225
Reto Meier

Vous pouvez accéder aux variables ou aux objets d’autres classes ou d’Activités de plusieurs manières.

A. Base de données 

B. préférences partagées.

C. Sérialisation d'objet.

D. Une classe pouvant contenir des données communes peut être nommée Utilitaires communs, cela dépend de vous.

E. Transmission de données via Intents et une interface pouvant être parcellisée.

Cela dépend des besoins de votre projet.

A. Base de données

SQLite est une base de données Open Source intégrée à Android. SQLite prend en charge les fonctionnalités de base de données relationnelles standard telles que la syntaxe SQL, les transactions et les instructions préparées. 

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

B. Préférences partagées

Supposons que vous souhaitiez stocker un nom d'utilisateur. Donc, il y aura maintenant deux choses: un nom d'utilisateur Key, Value Value.

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();

_ {En utilisant putString (), putBoolean (), putInt (), putFloat (), putLong (), vous pouvez enregistrer votre type d'état souhaité.

Comment chercher

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'objet

La sérialisation d'objet est utilisée si nous voulons enregistrer un état d'objet pour l'envoyer sur le réseau ou si vous pouvez également l'utiliser à vos fins.

Utilisez les haricots Java et stockez-les comme l'un de ses champs et utilisez les accesseurs et les configurateurs pour cela.

Les JavaBeans sont des classes Java possédant des propriétés. Pensez àproperties en tant que variables d'instance privée. Comme ils sont privés, le seul moyen De les accéder à l'extérieur de leur classe est d'utiliser des méthodes de la classe. Les méthodes Qui modifient la valeur d'une propriété sont appelées méthodes setter et les méthodes Qui extraient la valeur d'une propriété sont appelées méthodes getter. 

public class VariableStorage implements Serializable  {

    private String inString ;

    public String getInString() {
        return inString;
    }

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


}

Définissez la variable dans votre méthode de messagerie à l'aide de

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

Ensuite, utilisez objet Serialzation pour sérialiser cet objet et dans votre autre classe, désérialiser cet objet.

Lors de la sérialisation, un objet peut être représenté sous la forme d'une séquence d'octets contenant les données de l'objet, ainsi que des informations sur le type de l'objet et les types de données stockés dans l'objet.

Une fois qu'un objet sérialisé a été écrit dans un fichier, il peut être lu à partir du fichier et désérialisé, c'est-à-dire que les informations de type et les octets représentant l'objet et ses données peuvent être utilisés pour recréer l'objet en mémoire.

Si vous voulez un tutoriel pour cela référez vous à ce lien

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

Obtenir une variable dans d'autres classes

D. CommonUtilities

Vous pouvez créer vous-même une classe pouvant contenir des données communes dont vous avez souvent besoin dans votre projet.

Échantillon

public class CommonUtilities {

    public static String className = "CommonUtilities";

}

E. Transmission de données par intentions

Veuillez vous référer à 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/

10
Nikhil Agrawal

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();
5
Sora

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 "Retour d'un résultat à partir d'un écran"

3
Will

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 modifier les valeurs de n'importe quelle activité à volonté, indépendamment du flux de contrôle exact entre les différentes activités.

Notez que cette astuce ne peut être utilisée que si vous vous moquez de l'instanciation De plusieurs copies de la même activité (classe) dans l'application, Pourtant, j'ai trouvé que c'était la plus facile à implémenter et je l'utilise le plus.

2
Ohad Aloni

La meilleure façon de faire ici est de mettre variable à une classe commune qui est définie en dehors de la portée

public class Utils 
{
    public static String mPosition;
}

dans votre code (par exemple, OnButtonClick, etc.)

Intent intent = new Intent(Intent.ACTION_PICK, 
ContactsContract.Contacts.CONTENT_URI);
Utils.mPosition = mViewData.mPosition + "";
LogHelper.e(TAG, "before intent: " + Utils.mPosition);
startActivityForResult(intent, Keys.PICK_CONTACT);

dans le code de

@Passer outre public void onActivityResult (int requestCode, int resultCode, données d'intention) { if (requestCode == Keys.PICK_CONTACT) { if (resultCode == Activity.RESULT_OK) { Uri contactData = data.getData ();

            //you may use the variable here after intent result
            LogHelper.e(TAG, "after intent: " + Utils.mPosition);
....
0
Alp Altunel