Два тоста или обычных сообщения ( одно за другим ) в приложении хронометр

#android #textview #message #toast #chronometer

Вопрос:

Я не очень хорошо разбираюсь в Java и Android, но я хочу создать простое приложение для хронометра. Я создал кнопки»Пуск», «Стоп»/ «Пауза», «Сброс», и это работает, но я хочу отображать сообщение/текст («хорошо») в определенное время (например, в 00:15 секунд), затем сообщение должно скрываться, а новое сообщение должно отображаться в 00:28 секунд («супер»), а также скрываться. Я вставляю часть кода из MainActivity.java.

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(layout.activity_main);
    chronometer = findViewById(id.chronometer);
    chronometer.setFormat("(%m,%s)");
    chronometer.setBase(SystemClock.elapsedRealtime());
    chronometer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
        @Override
        public void onChronometerTick(Chronometer chronometer) {
            if ((SystemClock.elapsedRealtime() - chronometer.getBase()) >= 15000) {

                Toast.makeText(MainActivity.this, "Good!", Toast.LENGTH_SHORT).show();
            }
            if ((SystemClock.elapsedRealtime() - chronometer.getBase()) >= 28000) {

                Toast.makeText(MainActivity.this, "Super!", Toast.LENGTH_SHORT).show();
            }
        }
    });
}
 

Этот код в настоящее время генерирует первое сообщение в 00:15 секунд, но сообщение остается до 00:35-6 секунд, а затем отображается второе сообщение, но оба сообщения начинают отображаться случайным образом.

Я пытался изменить if ((SystemClock.elapsedRealtime() — хронометр.GetBase()) >= 15000) на if ((SystemClock.elapsedRealtime() — хронометр.GetBase()) == 15000), но это совсем не работает.

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

Ответ №1:

Это связано с тем, что вы показываете всплывающие сообщения несколько раз. Для каждого времени 1500 по прошествии миллисекунд всегда (SystemClock.elapsedRealtime() - chronometer.getBase()) >= 15000 верно.

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

 ((SystemClock.elapsedRealtime() - it.getBase()) / 1000) * 1000 == 15000L