【问题标题】:ProgressDialog won't dismiss in ThreadProgressDialog 不会在 Thread 中关闭
【发布时间】:2012-07-23 03:21:56
【问题描述】:

我是 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();  

有什么想法吗?

【问题讨论】:

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


【解决方案1】:

您无法在外部线程内与 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();

【讨论】:

    【解决方案2】:

    如果您在 UI 线程上进行任何 GUI 更新,这将是一个很好的做法。在任何线程中,您都可以运行您的 UI 线程,您可以在其中执行 UI 工作,或者您也可以使用消息处理程序,它也会为您做同样的事情。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-05
      • 2018-05-02
      • 1970-01-01
      相关资源
      最近更新 更多