#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