2011-07-11 38 views
0

所以我有一些簡單的代碼,但它似乎不工作..任何建議?Android:使用按鈕更新UI?

我只想在按下按鈕後顯示圖像,然後在2秒後變爲不可見。

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

圖像從不顯示,它始終保持不可見狀態,應該以另一種方式實現它嗎?我嘗試過處理程序..但它不起作用,除非我做錯了。

+0

我猜你的'ImageView'中有一個可顯示的內容嗎? –

+0

如果刪除firstImage.setVisibility(ImageView.INVISIBLE);圖像顯示? – Idistic

+0

@Idistic:是的,它的確如此。 – faul

回答

4

決不讓你的UI線程睡眠!

這樣做:

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); 
    } 
} 

在這裏您將設置延遲2000(毫秒)。

+0

工作,真棒。 – faul

0

那麼,你需要在兩條線之間加上延遲。使用線程或計時器來執行此操作。

點擊按鈕啓動線程。在run方法中,將ImageView的可見性更改爲VISIBLE,然後將該線程休眠n秒,然後進行更改,然後使其不可見。

要調用imageView的setvisibility方法,您需要在這裏使用hanlder。

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

我知道這個問題已經回答了,但我想我會增加對誰喜歡我的人一個答案,從此跌跌撞撞尋找一個類似的結果,其中延遲是由一個過程,而不是一個「睡眠」引起的

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); 
     } 
    }); 
}