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é.

Était-ce utile?

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.

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

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);
....
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top