我正在处理Tab布局和进度对话框。当用户进入选项卡布局以及用户更改选项卡时,我想显示进度对话框五秒钟。
我使用以下相同的代码在两种情况下显示进度对话框。
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 :(得分: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();
}
}
答案 1 :(得分:0)
我的猜测是progressDialog.dismiss()
崩溃,因为您正试图从非UI线程中删除。为了防止出现这种情况,您应该在UI /主线程中运行它,如下所示:
runOnUiThread(new Runnable() {
public void run() {
progressDialog.dismiss();
}
});