Comment passer les valeurs d'une activité à l'activité précédente
-
13-09-2019 - |
Question
Comment puis-je passer une valeur d'un écran à l'écran précédent?
Considérez ce cas: J'ai deux activités. Le premier écran a une TextView
et un bouton et la seconde activité a une EditText
et un bouton.
Si je clique sur le premier bouton, alors il doit passer à la deuxième activité et ici utilisateur doit saisir quelque chose dans la zone de texte. S'il appuie sur le bouton de la deuxième écran, puis les valeurs de la zone de texte devrait passer à la première activité et qui doit être affiché dans la première TextView
d'activité.
La solution
Pour capturer les actions effectuées sur une activité dans une autre nécessite trois étapes.
Lancer l'activité secondaire (votre activité « Modifier le texte ») en tant que sous-activité en utilisant startActivityForResult
de votre activité principale.
Intent i = new Intent(this,TextEntryActivity.class);
startActivityForResult(i, STATIC_INTEGER_VALUE);
Dans la sous-activité, plutôt que de fermer l'activité lorsqu'un utilisateur clique sur le bouton, vous devez créer une nouvelle intention et inclure la valeur de texte entré dans son paquet extras. Pour passer de nouveau à l'appel parent setResult
avant d'appeler finish
de 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 est l'activité d'appel: Priorité onActivityResult
à écouter callbacks de l'activité de saisie de texte. Obtenez le supplémentaire de l'intention de retour pour obtenir la valeur de texte devrait 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;
}
}
}
Autres conseils
Il y a deux façons par lesquelles vous pouvez accéder à des variables ou objets dans d'autres classes ou activité.
A. Base de données
B. préférences partagées.
C. sérialisation d'objets.
D. Une classe qui peut contenir des données communes peut être nommé Common Utilities il dépend de vous.
E. Faire passer des données à travers intentions et Parcelable Interface.
Il dépend de vos besoins du 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 les fonctions de base de données relationnelles standard comme la syntaxe SQL, les transactions et déclarations préparées.
Tutoriels - http://www.vogella.com/articles/AndroidSQLite/ article.html
B. Préférences partagées
Supposons que vous voulez enregistrer le nom d'utilisateur. Donc, il y aura maintenant deux choses Key Nom d'utilisateur, Valeur 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();
Utilisation PutString (), putBoolean (), putInt (), putFloat (), putLong () vous pouvez enregistrer votre dtatype désiré.
Comment chercher
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
String userName = sharedPref.getString("userName", "Not Available");
http://developer.android.com/reference/android/content /SharedPreferences.html
C. Objet sérialisation
Object serlization est utilisé si l'on veut sauver un état d'objet pour l'envoyer sur le réseau ou vous pouvez l'utiliser pour votre but aussi.
Utilisez Java Beans et stocker dans comme l'un de ses champs et apporteurs d'utilisation et régleurs pour que
JavaBeans sont des classes Java qui ont des propriétés. Penser à propriétés comme variables d'instance privées. Comme ils sont privés, la seule façon ils sont accessibles à l'extérieur de leur classe est par des méthodes dans la classe. le méthodes qui modifient la valeur d'une propriété sont appelés méthodes setter, et les méthodes qui extraient la valeur d'une 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éfinissez la variable que vous expédiez méthode en utilisant
VariableStorage variableStorage = new VariableStorage();
variableStorage.setInString(inString);
Ensuite, utilisez Serialzation d'objet pour sérialiser cet objet et dans l'autre classe désérialiser cet objet.
Dans la sérialisation d'un objet peut être représenté comme une séquence d'octets qui inclut 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ée qui est, les informations de type et 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 tutoriel pour ce faire référence ce lien
http://javawithswaranga.blogspot.in/2011/08 /serialization-in-java.html
Get variable dans d'autres classes
D. CommonUtilities
Vous pouvez faire une classe par votre auto qui peut contenir des données communes que vous avez souvent besoin dans votre projet.
Exemple
public class CommonUtilities {
public static String className = "CommonUtilities";
}
E. Passer des données par Intentions
S'il vous plaît consulter ce tutoriel pour cette option de transmettre des données.
vous n'avez pas à ..
appelez juste newIntenet () de la deuxième activité
Intent retData=new Intent();
Ajouter des données à transmettre retour
putExtras (retData.putExtra("userName", getUsrName()));
aller de l'avant avec setResult
setResult(RESULT_OK, retData);
et peut ensuite terminer
finish();
startActivityForResult ()
Et voici un lien à partir 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 « Le retour d'un résultat d'un écran »
J'utilise souvent des variables statiques dans l'activité d'appel avec des méthodes setter statiques pour les définir.
De cette façon, je peux modifier les valeurs dans toute activité à volonté, quel que soit le débit exact de contrôle entre les différentes activités.
Notez que cette astuce ne peut être utilisée que si vous ne se soucient pas de la instanciation de plus d'une copie de la même activité (classe) dans l'application, mais je trouve que cela est le plus facile à mettre en œuvre, 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 du champ d'application
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
@Override onActivityResult public void (int requestCode, int resultCode, les 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);
....