Android: обновить пользовательский интерфейс с помощью кнопки? - PullRequest
0 голосов
/ 12 июля 2011

Итак, у меня есть простой код, но он, кажется, не работает .. какие-либо предложения?

Я просто хочу, чтобы изображение отображалось после нажатия кнопки, а через 2 секунды становилось невидимым.

button.setOnClickListener(new OnClickListener() {
   public void onClick(View v) {
      firstImage.setVisibility(ImageView.VISIBLE);
      // delay of some sort
      firstImage.setVisibility(ImageView.INVISIBLE);
   }
}

Изображение никогда не показывается, оно всегда остается невидимым, я должен реализовать это по-другому? Я пробовал обработчики ... но это не сработало, если я не сделал это неправильно.

Ответы [ 3 ]

4 голосов
/ 12 июля 2011

Никогда не заставляет ваш поток пользовательского интерфейса спать!

Сделайте это:

final Handler handler = new Handler();

button.setOnClickListener(new OnClickListener() {
   public void onClick(View v) {
      firstImage.setVisibility(ImageView.VISIBLE);
      handler.postDelayed(new Runnable(){
            public void run(){
                 firstImage.setVisibility(ImageView.INVISIBLE);
            }
      }, DELAY);
   }
}

Где вы бы установили DELAY как 2000 (мс).

0 голосов
/ 07 ноября 2016

Я знаю, что на этот вопрос уже был дан ответ, но я подумал, что добавлю ответ для людей, которые, как я, наткнулись на это в поисках аналогичного результата, где задержка была вызвана процессом, а не "сном"

button.setOnClickListener(new OnClickListener() {
   public void onClick(View v) {
      firstImage.setVisibility(ImageView.VISIBLE);

      // Run the operation on a new thread
      new Thread(new Runnable(){
            public void run(){
                 myMethod();
                 returnVisibility();
            }
      }).start();
   }
}

private void myMethod() {
    // Perform the operation you wish to do before restoring visibility
}

private void returnVisibility() {
    // Restore visibility to the object being run on the main UI thread.
    MainActivity.this.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            firstImage.setVisibility(ImageView.INVISIBLE);
        }
    });
}
0 голосов
/ 12 июля 2011

Ну, вам нужно будет добавить задержку между двумя строками. Для этого используйте поток или таймер.

Начать тему по нажатию кнопки. В методе run измените видимость ImageView на VISIBLE, затем переведите поток в спящий режим на n секунд, а затем измените и сделайте его невидимым.

Чтобы вызвать метод setvisibility в imageView, вам понадобится помощник.

Handler handler = new Handler();
handler.post(new Runnable() {
    public void run() {
           image.setVisibiliy(VISIBLE);
           Thread.sleep(200);
           image.setVisibility(INVISIBLE);
    }
});
...