我正在使用下面的代码,我想在前面显示对话框并在后台加载内容但不能做同样的事情。请指教。
dialog = ProgressDialog.show(this, "", "Loading. Please wait...", true);
runOnUiThread(new Runnable(){
public void run() {
setContentView(R.layout.main_layout);
dialog.dismiss();
}
});
答案 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,在那里渲染它的时间很长。