1

我有一个延迟的电话,看起来像这样:

handler.postDelayed(new Runnable() { 
            public void run() {
                newDeviceBluetooth();
            //increment progressbar each thousand millis passed
            }
       },15000);

但是,我有一个功能齐全的进度条,我想随着延迟的每一秒增加它。那么解决这个问题的方法是什么,是实现这个的方法吗?

感谢您花时间回答和帮助我


因此,在我查看了答案的可能性之后,我编写了自己的实现可运行的类。这是实现这一点的可能方法吗?如果我的直觉没有乱七八糟,我想我有点搞错了。

    public void run() {
    while(counter <= 15){
        if(counter < 15){
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    counter++;
                }
            }, 1000);
        }
        else{
            sb.newDeviceBluetooth();
        }
    }

}
4

2 回答 2

3

您可以改用 AsyncTask 吗?然后您可以调用 publishProgress() 并在 onProgressUpdate() 中更新 UI

也许这不是最好的解决方案,因为它需要另一个线程。


但是你可以让你的 Runnable 每秒触发一次。您可以通过让 run() 方法对您的处理程序执行 postDelayed() 来做到这一点。

制作您自己的可扩展可运行类,并为计数器使用成员变量。在正常情况下更新 UI,并在第 15 次调用 newDeviceBluetooth()。

于 2011-06-22T16:24:37.620 回答
1

找到了问题的答案。App/dialog/Progress 对话框下的 api 演示中有一个示例代码

所以下面的代码需要修改,但是会显示进度条的延迟。

        mProgressHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (mProgress >= MAX_PROGRESS) {
                mProgressDialog.dismiss();
            } else {
                mProgress++;
                mProgressDialog.incrementProgressBy(1);
                mProgressHandler.sendEmptyMessageDelayed(0, 100);
            }
于 2011-06-27T09:59:59.717 回答