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
.
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;
}
}
}
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.
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();
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"
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.
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);
....