У меня есть проблема, что мой Android приложение не задержит в секунду (или 10 секунд), если я использую метод postDelayed ..Android postDelayed не задержит
В основном я хотел бы мою программу ждать одну секунду после того, как Я нажал кнопку, а затем обновил текст в своем текстовом виде («READY»), подождать еще 2 секунды, затем снова обновит текст («SET»), а затем он должен начать еще одно действие (еще не реализовано :-)).
С моим кодом запускается программа, и после того, как я нажму кнопку, текстовое изображение сразу отобразит последний текст («SET»). Это просто не ждет.
Что я делаю неправильно?
Вот мой код:
public class MyCounterActivity extends Activity {
private long mInternval = 100000;
private Handler mHandler;
private Runnable mStatusChecker = new Runnable() {
@Override
public void run() {
//updateInterval(); //change interval
startRepeatingTask();
}
};
void startRepeatingTask(){
mHandler.postDelayed(mStatusChecker, mInternval);
//mStatusChecker.run();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gym_counter);
final TextView tv1 = (TextView) findViewById(R.id.fullscreen_content);
final Button startButton = (Button) findViewById(R.id.startbutton);
startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final long up;
EditText textUp = (EditText) findViewById(R.id.editTextUp);
up = Integer.parseInt(textUp.getText().toString());
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//
}
},1000);
Log.d("after 1 runnable", "whaaat");
tv1.setText("Ready");
handler.postDelayed(new Runnable() {
@Override
public void run() {
//
}
}, 2000);
Log.d("after 2nd runnable", "whaaat 2");
//startRepeatingTask();
tv1.setText("SET");
}
});
}
Я также попытался запустить его с runOnUiThread() (в пределах OnClick (View объем), но с с тем же результатом). Я ожидал, что ждать 1 секунду (startRepeatingTask()), а затем запускает цикл и ждет несколько секунд ...
runOnUiThread(new Runnable() {
@Override
public void run() {
startRepeatingTask();
for (int u = 0; u < up; u++){
startRepeatingTask();
}
}
}
});
надеюсь, что мое описание имеет смысл :-).
Благодарим за помощь!
EDIT: Теперь я смог найти решение для своей первой проблемы. Ответ от @mad на этом посту helpded меня: How to start a different activity with some delay after pressing a button in android? (.! Вот, наверное, то же самое, что @laalto пытался сказать мне спасибо за подсказку)
В OnClick()
tv1.setText("READY");
mHandler.postDelayed(mDelay1, 2000);
И то Runnable
private Runnable mDelay1 = new Runnable() {
@Override
public void run() {
if (tv1.getText()=="READY")
tv1.setText("SET");
}
};
НО: Если я хочу, чтобы обновить текст на моем TextView после каждого второго, как я могу это сделать? Я не могу просто вызвать mHandler.postDelayed() несколько раз. Любая помощь приветствуется.
Я старался соблюдать: частный long mInternval = 100000; частный обработчик mHandler; private Runnable mStatusChecker = new Runnable() { @Override public void run() { mHandler = new Handler(); mHandler.postDelayed (это, mInternval); } }; и в моем коде я начал с этого «mStatusChecker.run();» ... Но он все еще не задерживается. Или я понял, что вы не правы? Спасибо за помощь! –
Вызов 'run()' в runnable запускает код немедленно и синхронно. Повторная отправка самого runnable без каких-либо дополнительных операций не делает ничего полезного. – laalto
Извините, но я не понимаю, что вы говорите: - \. Можете ли вы привести мне пример? Большое спасибо. –