静态值Android Studio

静态值Android Studio,android,android-activity,static-members,Android,Android Activity,Static Members,我有两项活动。和一个称为计数器的静态整数 因此,如果我按下活动“a”中的一个按钮,那么counter=counter+1 以下是活动a的代码: public static int counter = 0; cmdOk.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { counter = counter + 1;

我有两项活动。和一个称为计数器的静态整数

因此,如果我按下活动“a”中的一个按钮,那么
counter=counter+1

以下是活动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"));
        }
}
这是活动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"));
        }
}
我的问题是,当我试着按下活动a中的一个按钮3次时,它工作正常。现在的值是3

但当我尝试按下活动b中的按钮时,该值将重新启动为0。实际上我没有破坏活动a

所以我想要的是,即使我从活动a或b中按下,值也会持续变化

有什么想法吗

编辑:

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

我已经编辑了代码。塔吉汉活动是我努力完成的。因此,当计数器为5时,tagihan活动会发生变化。

不要使用静态数据,这是一种不好的方法,也不是常见的OOP开发方式,请尝试在活动之间传递数据

Act1

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

Bundle bundle = getIntent().getExtras();
String message = bundle.getString("message");
Android development web对此进行了介绍:
不要使用静态数据,这是一种不好的方法,也不是一种常见的面向对象的开发方式,而是尝试在活动之间传递数据

Act1

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

Bundle bundle = getIntent().getExtras();
String message = bundle.getString("message");
Android development web对此进行了介绍:

编辑后,我发现您需要一个“全局变量”,可以对所有活动进行读/写:

解决方案: 所有活动都嵌入到应用程序中,因此如果应用程序中有字段/成员,则可以使用标准设置器/获取器访问它们

你需要:

定义应用程序

public class MyApplication extends Application {

    private int counterVariable;

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

    public void setCounterVariable(int someVariable) {
        this.counterVariable = someVariable;
    }
}
将应用程序添加到清单:

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

编辑后,我可以看到您需要一个“全局变量”,可以对所有活动进行读/写:

解决方案: 所有活动都嵌入到应用程序中,因此如果应用程序中有字段/成员,则可以使用标准设置器/获取器访问它们

你需要:

定义应用程序

public class MyApplication extends Application {

    private int counterVariable;

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

    public void setCounterVariable(int someVariable) {
        this.counterVariable = someVariable;
    }
}
将应用程序添加到清单:

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

请使用以下代码:

//避免静态值保持的一般形式:

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"));
        }
}

请使用以下代码:

//避免静态值保持的一般形式:

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"));
        }
}

不建议在活动之间共享静态动态变量,因为您对活动生命周期几乎没有控制权。您试图解决的问题是什么?您必须为这两个活动的使用完整源代码。您如何将活动a的实例传递给b。你能展示一下吗?我已经编辑了我的问题。请检查它。您可以将其存储在SharedReference中,也可以将其存储在应用程序类上。此外,不建议在活动之间共享静态和动态变量,因为您对活动生命周期几乎没有控制权。您试图解决的问题是什么?您必须为这两个活动的使用完整源代码。您如何将活动a的实例传递给b。你能展示一下吗?我已经编辑了我的问题。请检查它。您可以将其存储在SharedPreference中,也可以在应用程序类中进行