Имитация задержки при нажатии кнопки

1

У меня есть кнопка, и когда эта кнопка нажата, я хочу сделать некоторые действия и вернуть их обратно, чтобы сказать 5 секунд. Например, когда нажата кнопка A, TextA.Text становится "Clicked" в течение 5 секунд, через 5 секунд значение текста должно возвращаться к исходному. Вот то, что у меня есть, но я чувствую, что это совершенно неправильно. Код, который задерживает:

diff=time2-time1;

            while (diff<5000) {
                //Log.d("Timer is", String.valueOf(diff));
                time2=System.currentTimeMillis();
                diff=time2-time1;
            }

поэтому до тех пор, пока цикл не работает, его симуляция задержки и после того, как я сделаю то, что хочу. Любой совет?

  • 0
    Не знал об этом, я думал, что большинство ответов, которые будут оценены, они будут засчитаны как ответ. Спасибо за эту информацию, в будущем я буду.
  • 0
    Вы можете вернуться ко всем своим старым вопросам и принять там лучшие ответы, а не только на будущие вопросы!
Показать ещё 1 комментарий
Теги:

6 ответов

6
Лучший ответ

Используйте обработчик, что-то вроде этого:

new Handler().postDelayed(new Runnable() {
    void run() {
        // do something later
    }
}, 5000);

Изменение: обратите внимание, что это решение позволяет продолжить основной поток во время задержки - обновить графический интерфейс, правильно Thread.sleep() изменения активности (например, кнопку "Главная") и т.д. Использование Thread.sleep() - нет.

  • 0
    +1 Судя по документам, я думаю, что это лучше, чем Thread.sleep .
  • 0
    хороший. stackoverflow.com/questions/7038463/...
Показать ещё 2 комментария
2

У вас есть способ сделать это:

Thread.sleep(5000)

Он может вызывать InterruptedException, поэтому вы должны его поймать.

  • 0
    dangit ты меня избил, я гунну говорю что xD
2

Занятая петля - плохая идея - она пожирает ваши батареи. Возможно, Thread.sleep будет работать лучше.

1

вы можете получить представление о Onclick и можете использовать

@Override
public void onClick(final View v) {
    if(v.getId() == R.id.button1) {

    if(isClikcalbe ){
isClikcalbe  = false;
      view.postDelayed(new Runnable() {

            @Override
            public void run() {

                // you code 
                 isClikcalbe = true;
            }
        }, 5000);
   }

    }
}

также можно использовать bollean isClikcalbe, чтобы остановить новый клик, пока не получите

1

Попробуйте этот код,

// First save the current value of Textbox in a variable 
String tmpVal = myEditText.getText();
// Now Setting of new Value for 2 seconds 
myEditText.setText ( "Clicked" );
// Sleeping for 5 seconds
try
{
     Thread.sleep(5000);
}
//Now Returning back to your old value
myEditText.setText ( tmpVal );

Все приведенные выше коды входят в public void onClick(View v) метод public void onClick(View v).

  • 0
    Какой из них лучше, thread.sleep или с помощью обработчика, как в приведенном выше комментарии?
  • 0
    согласно вашему использованию, Threa.Sleep будет лучше, так как вам нужно выполнить только одно действие.
0

Возможно, вы захотите рассмотреть AsyncTasks как контейнер, в котором вы выполняете свою работу. Кроме того, вы можете вызвать Thread.sleep внутри него. После того, как вы сделаете задание, попросите объект Handler изменить заголовок.

Причина для этого в AsyncTask вместо простого спящего основного потока заключается в том, что ваше приложение не "замораживается". Вот как вы могли его использовать:

private class AsyncHttpRequest extends AsyncTask<Void, Void, Void>{
        @Override
        protected Void doInBackground(Void... params) {
            Thread.sleep(5000);
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            _jobHandler.sendEmptyMessage(0);
        }
    }

protected Handler _jobHandler = new Handler() {
        @Override
        public void dispatchMessage(Message msg) {
            // set the caption here
        }
    };

Ещё вопросы

Сообщество Overcoder
Наверх
Меню