2016-02-12 1 views
0

J'ai deux activités. Et un entier statique appelé comme compteur. Donc, si j'appuie sur un bouton dans l'activité 'A', alors counter = counter + 1.Valeur statique Android Studio

Voici le code d'activité a:

public static int counter = 0; 
cmdOk.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     counter = counter + 1; 
     if (counter == 5) 
     { 
      tagihan.txtShip1.setTextColor(Color.parseColor("#000000")); 
      tagihan.txtNilai1.setTextColor(Color.parseColor("#000000")); 
      tagihan.txtSupir1.setTextColor(Color.parseColor("#000000")); 
     } 
} 

Et là, il est de l'activité b:

cmdSuccess.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     a.counter = a.counter + 1; 
     if (a.counter == 5) 
     { 
      tagihan.txtShip1.setTextColor(Color.parseColor("#000000")); 
      tagihan.txtNilai1.setTextColor(Color.parseColor("#000000")); 
      tagihan.txtSupir1.setTextColor(Color.parseColor("#000000")); 
     } 
} 

Mon problème est quand j'ai essayé d'appuyer sur un bouton d'activité a 3 fois il fonctionne parfaitement. Donc les valeurs sont 3 maintenant.

Mais quand j'ai essayé appuyer sur un bouton de l'activité b, la valeur va redémarrer dans 0. En fait, je n'ai pas détruit l'activité a.

Donc, ce que je veux, c'est que la valeur va continuellement, même si j'appuie sur l'activité a ou b.

Des idées?

Modifié:

J'ai modifier le code. L'activité de Tagihan est ce que j'essaie d'accomplir. Donc quand le compteur est 5, alors l'activité tagihan change.

+0

Le partage de variables dynamiques statiques entre des activités n'est pas préféré car vous avez peu de contrôle sur le cycle de vie de l'activité. Quel est le problème que vous essayez d'accomplir? –

+0

vous devez utiliser la source complète pour les deux activités. –

+0

comment vous passez l'instance de l'activité a à b. Pouvez-vous montrer s'il vous plaît? – KDeogharkar

Répondre

1

N'utilisez pas de données statiques, c'est une mauvaise approche et ce n'est pas une méthode OOP courante à développer, essayez à la place de transmettre les données entre les activités ...

Loi1

Intent intent = new Intent(activity2.this, activity1.class); 
intent.putExtra("message", message); 
startActivity(intent); 

Loi2:

Bundle bundle = getIntent().getExtras(); 
String message = bundle.getString("message"); 

web de développement Android donne une introduction à ceci: http://developer.android.com/training/basics/firstapp/starting-activity.html

1

Après votre édition, je peux voir que vous besoin d'un «varfiable global» qui peut b e lecture/écriture pour toutes les activités:

Solution: Toutes les activités sont intégrées dans une application, donc si vous habe champs/membres dans l'application que vous pouvez y accéder à un stadard setter/getter

dont vous avez besoin:

Définir une application

public class MyApplication extends Application { 

    private int counterVariable; 

    public int counterVariable() { 
     return this.counterVariable; 
    } 

    public void setCounterVariable(int someVariable) { 
     this.counterVariable = someVariable; 
    } 
} 

ajouter l'application au manifeste:

<application 
    android:name="MyApplication" 
    android:icon="@drawable/icon" 
    android:label="@string/app_name"> 

Ensuite, dans vos activités obtenir et définir la variable comme ceci:

// cast to Application and call the setter 
((MyApplication) this.getApplication()).counterVariable(1); 

// cast to Application and call the getter 
int counter = ((MyApplication) this.getApplication()).getCounterVariable(); 
0

S'il vous plaît utiliser le code ci-dessous:

// forme Généralisée d'éviter la tenue de valeur statique:

public class SPDataHandler { 


private Context mContext; 
private SharedPreferences mPreference; 
public SPDataHandler(Context context) { 
     this.mContext = context; 
     this.mPreference = mContext.getSharedPreferences("SAMPLE_SP", Context.MODE_PRIVATE); 
    } 
    /** 
    * COMMON SETTER FOR INTEGER DATA 
    */ 
    private void setIntegerData(String key, int value) { 
     SharedPreferences.Editor editor = mPreference.edit(); 
     editor.putInt(key, value); 
     editor.commit(); 
    } 
    /** 
    * COMMON GETTER FOR INTEGER SP DATA 
    */ 
    private int getIntegerSpData(String key, int defaultValue) { 
     return this.mPreference.getInt(key, defaultValue); 
    } 


    // Your Getter and Setter 

    public int getmCount() { 
     return this.getIntegerSpData("Count", 1); 
    } 

    public void setmCount(int cont) { 
     this.setIntegerData("Count", cont); 
    } 
} 

// Your Activity A 

SPDataHandler handler = new SPDataHandler(this); 
int count = handler.getmCount(); 
cmdOk.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     count = count + 1; 
     handler.setmCount(count); // Change the logic based on your requirement 
     if (count == 5) 
     { 
      tagihan.txtShip1.setTextColor(Color.parseColor("#000000")); 
      tagihan.txtNilai1.setTextColor(Color.parseColor("#000000")); 
      tagihan.txtSupir1.setTextColor(Color.parseColor("#000000")); 
     } 
} 


// Your Activity B 
SPDataHandler handler = new SPDataHandler(this); 
int count = handler.getmCount(); 
cmdSuccess.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     count = count + 1; 
     handler.setmCount(count); // Change the logic based on your requirement 
     if (count == 5) 
     { 
      tagihan.txtShip1.setTextColor(Color.parseColor("#000000")); 
      tagihan.txtNilai1.setTextColor(Color.parseColor("#000000")); 
      tagihan.txtSupir1.setTextColor(Color.parseColor("#000000")); 
     } 
}