0

我正在使用选项卡布局和进度对话框。我想在用户进入选项卡布局和用户更改选项卡时显示进度对话框,持续5秒。Android中的选项卡布局中的进度对话框

我使用了以下相同的代码来显示两种情况下的进度对话框。

public class TabLayoutActivity extends TabActivity { 
    ProgressDialog progressDialog; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.tablayoutview); 
     progressDialog = ProgressDialog.show(TabLayoutActivity.this, "", 
       "Loading. Please wait..."); 
     new Thread() { 
      public void run() { 
       try { 
        Thread.sleep(5000); 
        TabHost tabHost = getTabHost(); 
        TabHost.TabSpec tabSpec; 
        Intent intent = new Intent().setClass(
          getApplicationContext(), FirstTabActivity.class); 
        tabSpec = tabHost.newTabSpec("first").setIndicator("First") 
          .setContent(intent); 
        tabHost.addTab(tabSpec); 

        intent = new Intent().setClass(getApplicationContext(), 
          SecondTabActivity.class); 
        tabSpec = tabHost.newTabSpec("second") 
          .setIndicator("Second").setContent(intent); 
        tabHost.addTab(tabSpec); 
       } catch (Exception e) { 
        Log.e("tag", e.getMessage()); 
       } 
       progressDialog.dismiss(); 
      } 
     }.start(); 
    } 
} 

进度对话框工作正常,但标签的内容不显示。它显示以下错误。

+0

TabActivity已被弃用。你应该使用片段。 – 2012-07-18 10:37:48

+0

您正在将UI元素添加到UI线程之外的UI中。这就是你看到这个错误的原因。 – MobileCushion 2012-07-18 10:37:56

回答

1

试试这个

public class TabLayoutActivity extends TabActivity { 
ProgressDialog progressDialog; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.tablayoutview); 
    progressDialog = ProgressDialog.show(TabLayoutActivity.this, "", 
      "Loading. Please wait..."); 
    new Thread() { 
     public void run() { 
      try { 
       Thread.sleep(5000); 
TabLayoutActivity .this.runOnUiThread(new Runnable() { 

    @Override 
    public void run() { 
     TabHost tabHost = getTabHost(); 
       TabHost.TabSpec tabSpec; 
       Intent intent = new Intent().setClass(
         getApplicationContext(), FirstTabActivity.class); 
       tabSpec = tabHost.newTabSpec("first").setIndicator("First") 
         .setContent(intent); 
       tabHost.addTab(tabSpec); 

       intent = new Intent().setClass(getApplicationContext(), 
         SecondTabActivity.class); 
       tabSpec = tabHost.newTabSpec("second") 
         .setIndicator("Second").setContent(intent); 
       tabHost.addTab(tabSpec); 
       progressDialog.dismiss(); 
    } 
}); 

      } catch (Exception e) { 
       Log.e("tag", e.getMessage()); 
      } 

     } 
    }.start(); 
} 

}

+0

@ M Mohsin Naeem谢谢:) – 2012-07-19 13:49:08

+0

这帮了我没有我的项目,谢谢 – 2013-04-14 16:02:39

0

我的猜测是它崩溃的progressDialog.dismiss()因为你想从一个非UI线程删除“只有创建视图层次可以触摸其观点原来的线程”。为了防止这种情况,你应该在这样的UI /主线程中运行它:

runOnUiThread(new Runnable() { 
      public void run() { 
       progressDialog.dismiss(); 
      } 
     });