2011-07-11 96 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); 
     } 
    }); 
}