用Handler与Timer实现progressDialog倒计时

来源:互联网 发布:水果竞猜php源码 编辑:程序博客网 时间:2024/04/30 07:55
<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>
0 0
原创粉丝点击