Java progressdialog阻止contentview切换?

Java progressdialog阻止contentview切换?,java,android,Java,Android,每当我在关闭进度对话框后试图设置内容视图时,都会出现如下错误 04-13 14:40:38.043:WARN/System.err(801):android.view.ViewRoot$calledFromErrorThreadException:只有创建视图层次结构的原始线程才能接触其视图。 04-13 14:40:38.073:WARN/InputManagerService(59):窗口已聚焦,忽略:com.android.internal.view.IInputMethodClient$

每当我在关闭进度对话框后试图设置内容视图时,都会出现如下错误

04-13 14:40:38.043:WARN/System.err(801):android.view.ViewRoot$calledFromErrorThreadException:只有创建视图层次结构的原始线程才能接触其视图。 04-13 14:40:38.073:WARN/InputManagerService(59):窗口已聚焦,忽略:com.android.internal.view.IInputMethodClient$Stub的聚焦增益$Proxy@44dde3f0

我的代码就像

ProgressDialog dialog = null; //class variable.


dialog = ProgressDialog.show(Login.this, "", 
            "Logging you in. Please wait...", true);
     new Thread() {
         public void run() {
                 try{
                      //serious work here!
                    }
                    dialog.dismiss();
                    setContentView(R.layout.blaa);
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
         }
 }.start();

这是什么原因造成的?

您的线程不是UI线程。我认为您需要创建一个处理程序,然后在需要切换内容视图时向其发布Runnable

Handler hdl = new Handler(); // Will ron on UI-thread

dialog = ProgressDialog.show(Login.this, "", 
        "Logging you in. Please wait...", true);
new Thread() {
     public void run() {
             try{
                  //serious work here!
                }
                hdl.post(new Runnable() {
                    public void run() {
                        dialog.dismiss();
                        setContentView(R.layout.blaa);
                    }
                });
             } catch (Exception e) {
                 e.printStackTrace();
             }
     }
}.start();

您可以这样使用它:

 //Initialise
        private ProgressDialog m_ProgressDialog = null; 
        private Runnable myRunnable;

    //Make a runnable
        myRunnable= new Runnable(){
                    @Override
                    public void run(){
                        Thread.sleep(5000);
                        setContentView(R.layout.blaa);
                        m_ProgressDialog.dismiss();
                    }
                };


    //initialize your thread  
        Thread thread =  new Thread(null, myRunnable, "MagentoBackground");
        thread.start();

    //open up you dialog
        m_ProgressDialog = ProgressDialog.show(SelectStation.this,    
                        "", "Loading, please wait...", true);

它实现了一个runnable来运行您的逻辑