Таймер в android

180
25 марта 2022, 03:30

Я далеко не спец в программировании. Делаю приложение для своих детей. Суть вопроса в следующем. Имеем задание, его надо решить, при выводе Activity с заданием запускается таймер от 0 и до момента решения.

Реализовано таким образом с помощью интернета:

public TextView timerValue;
private long startTime = 0L;
private Handler customHandler = new Handler();
long timeInMilliseconds = 0L;
long timeSwapBuff = 0L;
long updatedTime = 0L;
private Runnable updateTimerThread = new Runnable() {
    public void run() {
    timeInMilliseconds = SystemClock.uptimeMillis() - startTime;
    updatedTime = timeSwapBuff + timeInMilliseconds;
    int secs = (int) (updatedTime / 1000);
    int mins = secs / 60;
    secs = secs % 60;
    int milliseconds = (int) (updatedTime % 1000);
    timerValue.setText("" + mins + ":" + String.format("%02d", secs) );
    customHandler.postDelayed(this, 0);
   }
};

И вывожу время в text view text_time

 @Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.universal);
     startTime = SystemClock.uptimeMillis();
     customHandler.postDelayed(updateTimerThread, 0);
     timerValue = findViewById(R.id.text_time);

Останавливаю отсчёт при завершении условия в методе if

customHandler.removeCallbacks(updateTimerThread);

Много кода, но всё работает, время тикает и останавливается.

Вопрос следующий, по завершении задания, вызываю новое диалоговое окно в котором есть ещё один text view texttimerresult. Так вот вопрос, как туда передать остановленное значение таймера из text_time? Уже мозги закипают, всё перепробовал((( Помогите как это можно реализовать. Спасибо.

Answer 1

Вы устанавливаете в text_time этот текст насколько я понял:

"" + mins + ":" + String.format("%02d", secs)

Я вижу два варианта решения:

  1. Делаете глобальную переменную, в которую сетите тот же стринг что и в textView. Дальше при вызове диалога вы берете эту переменную и устанавливаете в textView который находится в разметке диалога.
  2. Делаете функцию (или она уже у вас есть) которая показывает диалог,и в эту функцию передаете стринг который опять таки дальше устанавливаете в textView.

Для того чтобы установить текст в textView разметки диалога, вы объявляете переменную которая будет этим виджетом, а дальше все так же как и в функции onCreate(). Вот тут есть дополнительная информация по работе с таким видом диалогов. У вас тоже правильно, но вдруг понадобятся детали :)

UPDATE

Вы ведь как-то показываете диалог. Значит вам нужно сделать глобальную переменную как вы сделали это например с startTime, выглядеть будет так:

private String result = "";

дальше вы при установке текста в text_time присваиваете так же значение и для новой переменной, только в момент когда вы останавливаете таймер. У виджета textView есть такая функция как getText(). У вас будет что-то типа такого:

result = timerValue.getText().toString();

теперь у вас есть глобальная переменная которая может быть отображена в виджете диалога. Так же можно передавать в функцию которая отображает диалог. Так как я не знаю что и как вы делаете в программе, то я предположу:

void showDialog(String data){
dialog = new Dialog(this); 
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
dialog.setContentView(R.layout.previewdialog); 
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
dialog.setCancelable(false);
dialog.show();
}

дальше вы берете либо присланную дату, либо глобальную переменную (все зависит от ваших желаний) и устанавливаете текст в textView диалога:

resTextView = dialog.findViewById(R.id.your_id)
resTextView.setText(data); // либо если не прислали data то установите result 

и все. Сейчас проверить не могу, но если что-то не получится то дайте знать.

READ ALSO
Почему обработчик события не работает через include?

Почему обработчик события не работает через include?

Нужна in-app клавиатура,чтобы спокойно мог из разных активити подключатьКод следующий:

120
Получить данные со страницы для последующего использования

Получить данные со страницы для последующего использования

друзьяДля работы моей программы требуется:

291
MySQL из сайта на Android - возможно ли это?

MySQL из сайта на Android - возможно ли это?

Могу ли я в своём Android-приложении брать данные из БД MySQl, расположенной на сервере?

192