2 myc 100 myc_100 于 2012.12.24 13:07 提问

android中使用按钮来更新UI

使用以下代码想实现:当点击一个按钮后要显示一个图像,两秒后这个图像又变得不可见。

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

但是运行代码后,点击按钮,图像一直是不可见的。我是不是该用另一种方法来实现这个功能呢?使用handlers还是不对,还有什么方法呢?

3个回答

SunBo_Java
SunBo_Java   2012.12.24 14:19
已采纳

恩,你可以使用Handler的postDelayed方法来实现,且这种做法是线程安全的。
给你个例子:

private final Handler mHandler = new Handler();
private final Runnable runnable = new Runnable()
{
    @Override
    public void run()
    {
        firstImage.setVisibility(View.INVISIBLE);
    }
};

// displayTime就是你要设置控件显示的时间,单位为毫秒
public void showView(long displayTime)
{
    mHandler.removeCallbacks(runnable);
    firstImage.setVisibility(View.VISIBLE);
    mHandler.postDelayed(runnable, displayTime);
}
nana4ever
nana4ever   2012.12.24 16:37

不要让你的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);
   }
}

这里你应该设置DELAY为 2000 (ms)。

CSDN_Ask
CSDN_Ask   2013.01.08 13:36

调用 imageView's setvisibility方法,需要使用一个 hanlder

Handler handler = new Handler();
handler.post(new Runnable() {
    public void run() {
           image.setVisibiliy(VISIBLE);
           Thread.sleep(200);
           image.setVisibility(INVISIBLE);
    }
});
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Android使用线程来更新UI系列教程
Android使用线程来更新UI系列教程
Handler更新UI的几种方式
Handler、loop、MessageQueue的工作原理 Message:Handler接收和处理的消息对象 Looper:每个线程只能拥有一个looper.它的loop方法负责读取MessageQueue中的消息,读到信息之后就把消息返回给handler处理 MessageQueue:消息队列。程序创建Looper对象时,会在它的构造器中创建MessageQueue对象
Android初级开发----用Handle机制更新UI界面
引入: 之前对Android讲义的一个小项目——–随指尖移动的小球进行修改,利用View中的invalidate()方法实现每次触碰屏幕更新(UI线程)小球的位置并且附加判断大小,实现触碰更新小球大小随之更改颜色. API引入: 每次执行invalidate()方法都会 简单源码: 变色小球1.0新建一个DrawView类继承Viewpackage com.example.drawview_
Android中使用Handler机制更新UI的三种解决方案
最近想把学习Android过程中的Handler使用经验写下来,供自己以后查看,也与大家一起分享。        使用Handler其实不得不与Android中的线程或者说Java中的多线程扯上关系。本篇文章只会用到最基本的线程使用,不会涉及太难的,关于Android的线程我们以后再讨论。在Android中每新建一个Activity,该Activity(理解为界面)就是一个线程,是一个主线程,也
Activity和Fragment的几种交互方式(Activity可以改变Fragment的UI,Fragment也可以改变ActivityUI)
Activity和Fragment的四种交互方式(Activity可以改变Fragment的UI,Fragment也可以改变ActivityUI)
Android Service——在子线程中更新UI
Android中的UI是线程不安全的,也就是说,如果要更新应用程序里的UI 元素,则必须在主线程中进行,否则就会出现异常。在这里介绍两个方法来结局这个问题解析异步处理机制Android中的异步消息处理主要分为四个部分,Message、Handler、MessageQueue、Looper。 1.Message 是在线程之间传递的消息,它可以在内部携带少量的消息,用于在不同线程之间交换数据。 2.
Android使用Handler实时更新UI
在Android中,主要通过MessageQueue、Looper和Handler三个类来实现Android应用程序的消息处理。其中,MessageQueue类用来描述消息队列;Looper类用来创建消息队列,以及进入消息循环;Handler类则用来发送消息和接收消息。   本文将主要对Handler进行简要介绍,并以一个简单的实例演示如何使用Handler实时更新UI。   1
Android更新UI的两种方法(一)
Android更新UI的两种方法(一)在Android开发中,通常将联网、i/o、复杂的算法、查询数据库(大量数据)等耗时操作放在子线程中进行,这样可以避免ANR常(application not responing)。在子线程的操作过程中常常需要更新UI,而更新UI操作主要有两种方法。一种是直接在子线程中覆盖runOnUiThread()方法,另一种则是使用Android的消息机制。本文先介绍第
Android开发中更新UI的几种常用方式
Android开发中,我们经常会头疼UI更新的问题,尤其是跨线程更新UI。今天我们就来聊一聊具体有哪些能够可靠更新UI的的方式: 1、EventBus更新UI; 2、RunOnUiThread更新UI; 3、Handller; 4、runOnUiThread + EventBus更新UI; 5、runOnUiThread + Interface接口; 6、子线程 + runOnUiThr
Android使用handler和Runnable结合,自定义View更新UI的Demo
前三周在修改android4.2锁屏UI,刚做android好多知识不会啊,里面有个动画效果是一个jian