ProgressDialog不会在Thread中解除

时间:2012-07-23 03:21:56

标签: android android-layout android-dialog android-progressbar

我是Android开发人员的新手,我正在努力解决这个让我感到沮丧的问题。我试图关闭这个progressDialog。当我运行应用程序时,它会显示,提取信息,并更新UI。但是,对话框永远不会被驳回。

progDialog = ProgressDialog.show(HomeActivity.this, "", "Fetching info...", true, false); 
new Thread(new Runnable() {
    public void run() {
        fetchInfomation(userID); //fetches information - Works
        runOnUiThread(new Runnable() {
            public void run() { 
                setLayoutList(); //updates UI - Works
                progDialog.dismiss(); //doesn't seem to close progress dialog
                firstView(); //displays prompt - Works 
            }
        });   
        progDialog.dismiss(); //doesn't close dialog either
    }
}).start();  

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您无法与外部线程内的UI进行交互。有一些技术可以做到这一点,但没有必要。

您可以使用Handler

例如:

...
private Handler mHandler;

@Override
protected void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ...
    mHandler = new Handler() {

        @Override
        public void handleMessage (Message msg) {
            switch (msg.what) {
                case 0: ...
                case 1: ...
            }
        }
    }
}

....
new Thread() {

    @Override
    public void run() {
            ... // do your background jobs here
            mHandler.sendEmptyMessage(...); // interact with UI
        });   
    }
}.start();

答案 1 :(得分:0)

如果您在UI线程上执行任何GUI更新,那将是一种很好的做法。在任何线程中,您可以运行UI线程,您可以在其中执行UI内容,否则您也可以使用消息处理程序,它也会为您执行相同操作。

Runnable run_in_ui = new Runnable() {
    @Override
    public void run() {
        // do your UI stuffs here
    }
};
runOnUiThread(run_in_ui);