#java #android #android-viewmodel #chronometer
#java #Android #android-viewmodel #хронометр
Вопрос:
Я создал приложение для секундомера с использованием Chronometer
и ViewModel приложение работает хорошо до изменения конфигурации. при повороте экрана секундомер сбрасывается 00:00
.
это часть
StopwatchTabFrag.java
.
stopwatchTabViewModel.buttonIcon.observe(getViewLifecycleOwner(), new Observer<Integer>() {
@Override
public void onChanged(Integer imgId) {
switch (imgId){
//when the icon is changed to pause (or) when user clicks play icon then Stopwatch is start.
case R.drawable.ic_round_pause_circle_filled_24:
binding.stop.setVisibility(View.VISIBLE);
binding.startPause.setImageResource(imgId);
stopwatchTabViewModel.startStopwatch(stopwatchChronometer);
break;
//when the icon is changed to start (or) when user clicks pause icon then Stopwatch is pause.
case R.drawable.ic_round_play_arrow_24:
binding.startPause.setImageResource(imgId);
stopwatchTabViewModel.pauseStopwatch(stopwatchChronometer);
break;
case R.drawable.ic_round_stop_24:
binding.stop.setVisibility(View.GONE);
stopwatchTabViewModel.stopStopwatch(stopwatchChronometer);
}
}
});
Я использую Observer всякий раз, когда меняется значок конкретной кнопки, он выполняет эту конкретную задачу.
это часть
StopwatchTabViewModel.java
.
public void startStopwatch(Chronometer chronometer){
if (!isRunning.getValue()){
chronometer.setBase(SystemClock.elapsedRealtime()-pauseOfset.getValue());
chronometer.start();
_isRunning.setValue(true);
}
}
public void pauseStopwatch(Chronometer chronometer){
if (isRunning.getValue()){
chronometer.stop();
_pauseOfset.setValue(SystemClock.elapsedRealtime()-chronometer.getBase());
_isRunning.setValue(false);
}
}
public void stopStopwatch(Chronometer chronometer){
chronometer.setBase(SystemClock.elapsedRealtime());
_pauseOfset.setValue(0L);
chronometer.stop();
//Reset the icon to Start
_buttonIcon.setValue(R.drawable.ic_round_play_arrow_24);
}
Я реализовал методы задачи секундомера в ViewModel
классе. Я не знаю, правильно это или неправильно.
Я жду ваших ответов.
Ответ №1:
добавьте эту строку в объявление Activity
s в манифесте:
android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"
это предотвратит Activity
уничтожение при вращении (следовательно, и вашего хронометра), вам придется самостоятельно обрабатывать вращение при onConfigurationChanged
вызове метода (вам, вероятно, ничего не нужно будет делать в вашем случае)
ЗДЕСЬ у вас есть некоторая информация об изменении конфигурации.