2012-06-11 11 views
0

possible en double:
Passing data between activities in AndroidComment partager des variables entre les classes en Java

J'ai donc deux activités de, et je dois sauver une variable dans la première activité, et l'utiliser dans la deuxième activité. Quelqu'un peut-il m'aider? Merci!

+5

Alors, qu'avez-vous déjà essayé? –

+1

Commencez-vous votre seconde activité en utilisant n'importe quelle méthode 'Intent' comme' startActivity (intention) 'Si oui, référez-vous à ces [Data Passing] (http://stackoverflow.com/q/2091465/940096) et [Passing Data] (http://stackoverflow.com/questions/2965109/passing-data-between-activities-in-android) – Praveenkumar

+2

Je ne comprends pas pourquoi les gens donnent les exemples de 'putExtra' et' getExtra' dans de telles situations, quand tout simplement l'accès aux variables via 'getters' et' objects' est ce qui devrait être encouragé davantage. –

Répondre

0

est ici une façon de le faire, je suppose:

class Class1 { 
    private int someValue = 0 
    void doSomething(Class2 anotherObj) { 
     this.someValue = 1; 
     anotherObj.setValue(this.someValue); 
    } 
} 

Il y a beaucoup d'autres façons :)

1

Première activité:

.... 
    Intent intent = new Intent(this, SecondActivity.class); 
    intent.putExtra(Consts.EXTRA_EDIT_MODE_KEY, 123); 
    .... 
    intent.putExtra(_some_key_, _some_data_); 
    intent.putExtra(_some_key_, _some_data_); 
    startActivity(intent); 

SecondActivity:

..... 
    Intent intent = getIntent(); 
    int mode = intent.getIntExtra(Consts.EXTRA_EDIT_MODE_KEY, -1); 
    ...... 
0

vous pouvez transmettre les données de la première activité à la seconde activité en utilisant le paramètre intention.putExtra (yourData);

1

Restez simple. Dans une classe, vous définissez la valeur de la variable dans une autre classe, utilisez l'instance de cette classe pour l'obtenir.

public class Activity1 {  

    private String var; 

    public Activity1() { 
     setVar("some_value"); 
    } 

    public String getVar() { 
     return this.var; 
    } 

    public void setVar(String var) { 
     this.var = var; 
    } 
} 

public class Activity2 { 
    public void doSmth() { 
     Activity1 a = new Activity1(); 
     String varValue = a.getVar(); 

    } 
} 
+0

C'est la bonne réponse. Si la question est "comment puis-je ouvrir une activité qui reçoit var de l'appelant", cela est résolu par bundle. Mais disons que vous avez (par exemple) un calque avec quelques boutons (activité1) et au milieu un cadre avec une vue personnalisée (actvity2), et vous voulez partager la valeur: cliquez sur le bouton pour changer de couleur (bouton en activité1) et dessinez avec cette couleur en activité2, la réponse de Paulius est la meilleure. Vous NE pouvez pas utiliser static car le contenu de var dans la deuxième activité ne sera pas actualisé lorsque vous changerez est en première actvity. – Peter

+0

Juste un détail: je dis que vous ne pouvez pas utiliser static, ce qui signifie que vous ne pouvez pas définir un var comme statique dans activ1 et seulement lire est "statiquement" dans activ2. Il semble que vous ayez toujours besoin de demander la valeur au propriétaire, donc à partir de activ1. – Peter

3

Utilisez quelque chose comme ceci:

Intent intent = new Intent(this, ClassImCalling.class); 
    intent.putExtra("variable", myvariable); 
    startActivityForResult(intent, int_identifier); 

Et dans l'autre activité:

intent = getIntent(); 
    var=intent.getStringExtra("variable"); 

Pour revenir à l'activité qui l'a appelé (l'intention d'être même ci-dessus getIntent()) :

setResult(RESULT_OK, intent); 
    finish(); 

Et lorsque vous revenez à la première activité:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == int_identifier) { 
     if (resultCode == RESULT_OK) { 
      Do suff 
     }else if(resultCode == RESULT_CANCELED){ 
      Action was cancelled :(
     } 
    } 
} 
1

Comme votre exigence est d'utiliser une valeur de variable dans plusieurs classes d'activité. Comme ils signifient qu'il s'agit de classes JAVA, vous pouvez utiliser une variable statique pour votre tâche.

Supposons que vous avez une classe comme ça,

public class Activity1 extends Activity{ 
static String name="abc"; 
} 

Si vous souhaitez utiliser cette variable de nom dans une autre classe, vous pouvez utiliser,

public class Activity2 extends Activity{ 
String name2=Activity1.name; 
} 
+0

Ne fonctionne pas. En fait, si vous changez la valeur dans la première activité, la modification ne se reflète pas dans la seconde. La seule façon de «demander» la valeur à la première activité, comme dans la réponse de Paulius – Peter

0

Faire la statique variable est partagé par toutes les classes.

0

Si nous utilisons la préférence partagée, nous pouvons utiliser cette valeur dans n'importe quelle activité.

Voici le code ManageSharesPrefs:

SharedPreferences myPrefs = this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE); 
     SharedPreferences.Editor prefsEditor = myPrefs.edit(); 
     prefsEditor.putString(MY_NAME, "Sai"); 
     prefsEditor.putString(MY_WALLPAPER, "f664.PNG"); 
     prefsEditor.commit(); 

et retrive valeur

SharedPreferences myPrefs = this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE); 
     String prefName = myPrefs.getString(MY_NAME, "nothing"); 
     String wallPaper = myPrefs.getString(MY_WALLPAPER, null); 
0

Vous pouvez utiliser l'objet Bundle pour partager une variable sur 2 activités. Voici comment je l'utilise:

(1) Tout d'abord, placez la variable comme un extra dans un paquet. Supposons que vous ayez la variable FirstActivity et que vous souhaitez l'envoyer à SecondActivity, alors c'est la façon de le mettre (dans le FirstActivity):

 String variableValue="x"; // it holds some value which you want to pass to SecondActivity. 
     Intent secondIntent = new Intent(view.getContext(), SecondActivity.class); 
     Bundle bundleObj = new Bundle(); 
     bundleObj.putString("variableName", variableValue); 
     secondIntent.putExtras(bundleObj); 
     startActivityForResult(secondIntent, 0); 

(2) Voici comment nous obtenons dans le SecondActivity (dans la méthode onCreate()):

 Bundle extras = getIntent().getExtras(); 
     String variableValue = extras.getString("variableName"); 

** Similarly you can pass the integer and other datatyped values as well. 
Questions connexes