用Handler与Timer实现progressDialog倒计时

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">写下这篇文章是为了以后用到时直接复制代码</span>
下面是实现Progressdialog在屏幕中央显示:
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span><pre name="code" class="java">dialog = new ProgressDialog(getActivity());
        dialog.setTitle("联网");//设置标题
        dialog.setMessage("正在联网"+LinkTime+"s");    //设置说明文字
        dialog.setIndeterminate(false);    //设置进度条是否为不明确(来回旋转)
        dialog.setCanceledOnTouchOutside(false);    //设置点击屏幕不消失
        dialog.setCancelable(true);    //设置进度条是否可以按退回键取消

        Window wd = dialog.getWindow();    //获取屏幕管理器
        WindowManager.LayoutParams lp = wd.getAttributes();
        lp.alpha = 0.8f;    //设置循环框的透明度
        wd.setAttributes(lp);    //设置弹出框的透明度
        wd.setGravity(Gravity.CENTER);    //设置水平居中
        dialog.dismiss();//先隐藏起来,再在监听器中调用dialog.show()
 
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span><pre name="code" class="html">下面是倒计时的实现方法:
<pre name="code" class="java">Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg){
            switch (msg.what) {
                case 1:
                    dialog.setMessage("正在联网"+LinkTime+"s");
                    if(LinkTime < 0){
                        timer.cancel();
                        dialog.dismiss();
                    }
            }
        }
    };
</pre><pre name="code" class="java"><pre name="code" class="java"> public class  MyTimerTask extends TimerTask {
        @Override
        public void run() {
            LinkTime--;
            Message message = new Message();
            message.what = 1;
            handler.sendMessage(message);
        }
    };

监听器中调用,这之前需要先建立一个MyTimerTask对象task跟一个Timer对象计时实现task
 
<pre name="code" class="java"><pre name="code" class="java">                    dialog.show();
                    if (task != null){
                        task.cancel();  //将原任务从队列中移除,不然倒计时没到取消后再次点击时会奔溃
                    }
                    task=new MyTimerTask();
                    timer=new Timer();
                    timer.schedule(task, 1000,1000);

目前遇到一个问题便是倒计时没到,按返回键取消progressdialog后,再次点击按钮实现监听事件,虽然Timer不会奔溃,但是progressdialog不会再次显示出来,我尝试过重新new一个dialog也没有用,哪位仁兄告诉我怎么解决这个问题,感激不尽。
 
 


 
</pre><pre>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值