在后台通过setContentView加载布局时显示对话框

时间:2010-04-15 12:43:44

标签: android android-emulator

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

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

3 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:1)

有一个如何在Android developer's website的单独线程中加载的示例。要查看实际代码,请展开“进度对话框”部分末尾的视图。

但是,根据您的具体情况,您需要重新修改自己的工作方式。花了这么长时间你需要一个进度对话框吗?您应该在第二个线程中加载它,同时使用setContentView显示某种临时布局。然后,一旦线程完成加载,再次调用setContentView,或者更改文本,图像或随线程加载的任何内容。

最后:如果你真的很喜欢Android中的编程,我现在就避免尝试使用单独的线程和复杂的加载。这样做有点棘手,首先需要了解很多。

答案 2 :(得分:0)

听起来你想要一个启动画面或其他东西,但设置内容视图不应该在一个线程中完成。发布layout.xml,在那里渲染它的时间很长。