1

我正在使用下面的代码,我想在前面显示对话框并在后台加载内容,但不能这样做。请指教。

dialog = ProgressDialog.show(this, "", "Loading. Please wait...", true);
runOnUiThread(new Runnable(){
  public void run() {
    setContentView(R.layout.main_layout);
    dialog.dismiss();
  }
});
4

3 回答 3

6

我通过阅读以下链接得到了解决方案,并实现了如下代码:http: //developer.android.com/guide/appendix/faq/commontasks.html#threading

int glb=0,glbtotal=3;
final Handler mHandler = new Handler();

// Create runnable for posting
final Runnable mUpdateResults = new Runnable() {
    public void run() {
        updateResultsInUi();
    }
};

public void open_next_screen()
    {
            dialog = ProgressDialog.show(this, "", "Loading. Please wait...", true);
            startLongRunningOperation();
     }
private void updateResultsInUi() {

    // Back in the UI thread -- update our UI elements based on the data in mResults
    switch(glb)
    {
    case 0:
         setContentView(R.layout.main_layout);
            getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title);

        break;
    case 1:
    part2();

    break;
    case 2:
     part3();

    break;
    }

}

protected void startLongRunningOperation() {

    // Fire off a thread to do some work that we shouldn't do directly in the UI thread
    Thread t = new Thread() {
        public void run() {


            for(glb=0;glb<glbtotal;glb++)
            {
                mHandler.post(mUpdateResults);

            switch(glb)
            {
            case 0:
                part1();
                break;

            }
            }
              dialog.dismiss();
        }
    };
    t.start();
}
于 2010-04-16T05:39:42.047 回答
1

在Android 开发者的网站上有一个如何在单独的线程中加载的示例。要查看实际代码,请展开进度对话框部分末尾的视图。

但是,对于您的特定情况,您需要重新设计您的工作方式。什么花了这么长时间以至于您需要一个进度对话框?您应该在第二个线程中加载它,同时使用 setContentView 显示某种临时布局。然后,一旦线程完成加载,要么再次调用 setContentView,要么更改文本、图像或您使用线程加载的任何内容。

最后:如果您真的不熟悉 Android 编程,我会暂时避免尝试使用单独的线程和复杂的加载内容。这有点棘手,首先要了解很多。

于 2010-04-15T12:54:20.967 回答
0

听起来你想要一个启动屏幕或其他东西,但设置内容视图不应该在线程中完成。发布 layout.xml,其中的内容需要这么长时间才能呈现。

于 2010-04-15T13:49:25.010 回答