2016-02-12 2 views
0

У меня есть две операции. И статическое целое, называемое счетчиком.Статическое значение Android Studio

Так что если я нажму кнопку в действии 'A', то counter = counter + 1.

Вот код от деятельности в:

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

А вот от деятельности Ъ:

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

Моя проблема когда я пытался нажать на кнопку от деятельности в 3 раза она работать отлично. Значения теперь равны 3.

Но когда я попытался нажать кнопку из действия b, значение будет перезапущено в 0. На самом деле я не уничтожал активность a.

Так что я хочу, чтобы значение непрерывно продолжалось, даже я нажимаю из активности a или b.

Любые идеи?

Отредактировано:

У меня есть редактировать код. Деятельность Tagihan - это то, что я пытаюсь сделать. Поэтому, когда счетчик равен 5, активность tagihan меняется.

+0

Совместное использование статических динамических переменных среди действий не является предпочтительным, поскольку вы не можете контролировать жизненный цикл Activity. В чем проблема, которую вы пытаетесь выполнить? –

+0

вам нужно показать полный источник для обоих видов деятельности. –

+0

, как вы передаете действие, например, в b. вы можете показать? – KDeogharkar

ответ

1

Dont использовать статические данные, это плохой подход и не является общим OOP-способом для разработки, вместо этого попробуйте , проходя мимо данных между действиями ...

Act1

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

Акт 2:

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

веб Android разработка дает введение в это: http://developer.android.com/training/basics/firstapp/starting-activity.html

1

После правки, я могу видеть, что вы нужен «глобальный варифицируемый», который может b е чтение/запись для всех видов деятельности:

Решение: Все мероприятия встроены в приложение, так что если вы Habe полей/членов в приложении вы можете получить доступ к ним с Stadard сеттер/добытчика

вам нужно:

Определить приложение

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"> 

Тогда в вашей деятельности получить и установить переменную следующим образом:

// 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

Пожалуйста, используйте следующий код:

// Обобщенная форма избежать статического значения проведения:

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")); 
     } 
} 
Смежные вопросы