Я создаю приложение, в котором есть кнопка, управляющая CountDownTimer, которая запускается независимо от того, открыто или нет приложение. В конце таймера в строке состояния появляется уведомление, в котором пользователь запрашивает запуск другого действия. Этот таймер повторяется с возрастающими интервалами в течение x раз. Кроме того, чтобы предотвратить случайный запуск таймера несколько раз, я отключу кнопку после первого нажатия. В конце цикла повтора обратного отсчета кнопка снова включается.Android, сохраняющий переменную, когда активность уничтожена, а затем воссоздана
Все это прекрасно работает, когда я держу деятельность открытым ...
Моя проблема, когда я нажимаю BACK. Если я снова открою действие, кнопка не сможет повторно активироваться после окончания цикла обратного отсчета. Я считаю, что состояние переменной «count» теряется, когда действие уничтожается.
Я новичок в программировании и буду признателен за любую помощь. Я прошу прощения за то, насколько грязный этот код! Это все еще большая работа. Заранее спасибо!
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startB = (Button) this.findViewById(R.id.button);
startB.setOnClickListener(this);
countDownTimer = new MyCountDownTimer(times[count], interval);
LoadPreferences();
if (savedInstanceState !=null)
{
count = savedInstanceState.getInt("mCount");
}
else
{
count=0;
}
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState)
{
savedInstanceState.putInt("mCount", count);
super.onSaveInstanceState(savedInstanceState);
}
@Override
public void onBackPressed(){
SavePreferences();
super.onBackPressed();
}
private void SavePreferences(){
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("mCount", mCount);
editor.putBoolean("state", startB.isEnabled());
editor.commit();
}
private void LoadPreferences(){
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
int mCount = sharedPreferences.getInt("count", mCount);
Boolean state = sharedPreferences.getBoolean("state",true);
startB.setEnabled(state);
mCount = count
}
public void onClick(View v)
{
if (!timerHasStarted)
{
countDownTimer.start();
timerHasStarted = true;
Toast t= Toast.makeText(this,"Timer Started", Toast.LENGTH_SHORT);
t.show();
}
else
{
startB.setEnabled(false);
}
}
// CountDownTimer class
public class MyCountDownTimer extends CountDownTimer
{
public MyCountDownTimer(long startTime, long interval)
{
super(startTime, interval);
}
@Override
public void onFinish()
{
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getBaseContext())
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("ASL Teacher")
.setContentText("Play Lesson One");
//Intent resultIntent= new Intent();
//TaskStackBuilder stackBuilder = TaskStackBuilder.create(MainActivity.this);
//stackBuilder.addParentStack(NextActivity.class);
//stackBuilder.addNextIntent(resultIntent);
//PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
//mBuilder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// mId allows you to update the notification later on.
mNotificationManager.notify(0, mBuilder.build());
Vibrator v= (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(pattern,-1);
// Тост т = Toast.makeText (getApplicationContext(), "Времена Вверх" + String.valueOf (раз [число]), Toast.LENGTH_SHORT); // t.show(); count ++;
if (count < 3)
{
countDownTimer = new MyCountDownTimer(times[count], interval);
countDownTimer.start();
}
else
{
count=0;
startB.setEnabled(true);
timerHasStarted=false;
}
}