2015-10-22 2 views
1

Je me demande comment j'irais accéder à la même variable int entre toutes mes classes Activity dans mon application Android. Ma situation est que j'ai une variable qui représente un certain nombre de points et je l'ai placé dans sa propre classe et je veux que la valeur soit la même entre tous les Activity qui l'utilise.Comment accéder à la même variable entre les activités dans Android

Lorsque l'utilisateur obtient un point, il augmente de 1 alors disons que l'utilisateur obtient 12 points, je veux qu'il soit le même dans tous les Activity s.

+0

Cochez cette case [answer] (http://stackoverflow.com/a/4878259/5891893) pour connaître les meilleures façons communes de partager des données entre les activités – Sally

Répondre

3

ÉTAPE 1:

Extend tous vos Activity s d'une classe BaseActivity commune.

ÉTAPE 2:

Mettez votre variable int dans BaseActivity et ajoutez les protected et static qualificatifs à la variable int:

public class BaseActivity extends Activity{ 

    .... 
    .... 
    protected static int points; 
    .... 
    .... 

} 

Maintenant, vous pouvez accéder à la variable points dans tous les Activity et aura la même valeur.

Il n'est pas nécessaire d'utiliser un singleton ici comme le suggèrent les autres réponses. C'est beaucoup plus simple d'avoir une variable commune static. Sa programmation 101.

Essayez ceci. Cela fonctionnera.

+0

J'ai spécifié que l'utilisation de singleton est l'un des meilleurs modes de partage de vars. Votre solution fonctionne aussi, c'est seulement un autre mode d'utilisation des variables statiques. Votre exemple est bon de partager seulement entre l'activité, singleton est un modèle de conception typique, tout développeur devrait le savoir. – ZanoOnStack

+0

J'aime le rasoir d'Occam. Ca s'applique ici, regarde ça ... :) –

4

Vous pouvez utiliser une classe d'objet singleton. Mais c'est un motif élémentaire java.

public class MySingletonClass { 

    private static MySingletonClass instance; 

    public static MySingletonClass getInstance() { 
     if (instance == null) 
      instance = new MySingletonClass(); 
     return instance; 
    } 

    private MySingletonClass() { 
    } 

    private int intValue; 

    public int getIntValue() { 
     return intValue; 
    } 

    public void setIntValue(int intValue) { 
     this.intValue = intValue; 
    } 
} 

Et vous pouvez utiliser partout

MySingletonClass.getInstance().getInt; 

et

MySingletonClass.getInstance().setInt(value); 

Ce n'est pas le mode le plus rapide, mais il est l'un des meilleurs. En fait, vous pouvez ajouter combien var vous voulez, et vous pouvez accéder à partir de partout, également dans la classe

+0

Merci beaucoup je verrai si ça marche! –

0

Vous pouvez le faire en définissant une variable dans le contexte de l'application et utiliser cette variable comme variable globale. Vous venez de définir la valeur de cette variable et d'obtenir de la valeur sur toute activité/émission récepteur/service dans le contexte de l'application (environnement). Chaque application a un contexte et Android garantit que le contexte de l'application existera en tant qu'instance dans l'ensemble de votre application.

La façon de procéder est de créer une classe et s'étend avec android.app.Application, et spécifiez votre classe dans la balise d'application dans votre fichier AndroidManifest.xml. Android créera une instance de cette classe et la rendra disponible pour l'ensemble de votre contexte d'application. Vous pouvez obtenir l'objet de votre classe sur n'importe quelle activité/émission récepteur/service dans le contexte de l'application (environnement) par la méthode Context.getApplicationContext().

N: B: Vous pouvez y parvenir en créant une variable statique, mais il est pas la bonne façon il influencer vers des fuites de mémoire

Vous pouvez voir l'exemple de code here

+0

Merci aussi! –

0

Créer une classe Java qui étend la classe d'application Android. Mettez votre variable int là en tant que statique. Ensuite, créez votre getter et setter pour accéder à la variable n'importe où à partir de votre application.

public class MyApplication extends Application{ 
    private static int someInteger; 
    //setter 
    //getter 
} 

De toute classe android appeler votre variable comme celui-ci.

MyApplication.getSomeInteger() 
MyApplication.setSomeInteger(Int someInteger) 
0

Pour cela, utilisez SharedPreference, plus sûr

Enregistrer dans SharedPreference vos points, et les secours quand vous avez besoin.