最近在网上看到了一个关于dialogprogress的文章,就是带进度条的对话框。
里面段代码这样写的:
final ProgressDialog pd2=new ProgressDialog(this);
             pd2.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
             pd2.setIcon(R.drawable.png0075);
             pd2.setMax(100);
             pd2.setProgress(0);
             pd2.setIndeterminate(false);
             pd2.setCancelable(true);
             pd2.setButton("YES",new DialogInterface.OnClickListener() {
                        
                        public void onClick(DialogInterface dialog, int which) {
                        }
                });
             new Thread(){   
                    public void run(){   
                        try{   
                            while(mcount<=100){   
                                pd2.setProgress(mcount++);   
                                Thread.sleep(100);   
                            }   
                            pd2.cancel();   
                        }catch(Exception ex){   
                            pd2.cancel();   
                        }   
                    }   
                }.start();   
            pd2.show();
我以前看到过说是其它线程都不能直接修改控件,要使用handler才行。
但为什么这里的新线程里面它就直接调用用主线程的控件方法了pd2.setProgress(mcount++);这一句.
我试了一下,还没报错,这是怎么回事,请高手解释?

解决方案 »

  1.   

    因为ProgressDialog自己掉了Handler public void setProgress(int value) {
            if (mHasStarted) {
                mProgress.setProgress(value);
                onProgressChanged();
            } else {
                mProgressVal = value;
            }
    }
    private void onProgressChanged() {
            if (mProgressStyle == STYLE_HORIZONTAL) {
                mViewUpdateHandler.sendEmptyMessage(0);
            }
        }
      

  2.   

    在子线程中处理逻辑,然后使用Handler处理UI的变化。
      

  3.   


    这样是不是说progressdialog都可直接在任何线程中修改?