我有一个主要活动,使用以下代码启动子活动:
Intent intent = new Intent();
intent.setClassName(MyChildActivity.class.getPackage().getName(), MyChildActivity.class.getName());
((Activity)context).startActivity(intent);
我正在尝试在子活动中执行耗时的任务,并希望在我这样做时显示ProgressDialog。我的代码如下所示:
private ProgressDialog _progressDialog;
private OnClickListener btn_onClick = new OnClickListener() {
public void onClick(View v) {
_progressDialog = ProgressDialog.show(
v.getContext(),
"Please wait",
"Performing task..."
);
TaskThread t = new ExportThread(v.getContext());
t.start();
}
};
private class TaskThread extends Thread{
private Context _context;
public TaskThread(Context context) {
_context = context;
}
private Handler _handler = new Handler() {
@Override
public void handleMessage(Message msg) {
_progressDialog.dismiss();
}
};
@Override
public void run() {
performTask(_context);
_handler.sendEmptyMessage(0);
}
}
由于某种原因,ProgressDialog未显示。如果我在主活动中使用相同的代码,它可以工作 - 但不在子活动中。此外,以下代码也无法显示ProgressDialog(但Toast确实显示):
private ProgressDialog _progressDialog;
private OnClickListener _btn_onClick = new OnClickListener() {
public void onClick(View v) {
_progressDialog = ProgressDialog.show(
v.getContext(),
"Please wait",
"Performing task..."
);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
_progressDialog.dismiss();
Toast.makeText(v.getContext(), "Done with progress dialog.", Toast.LENGTH_SHORT).show();
}
};
有什么想法吗?我们不允许从儿童活动中显示ProgressDialog吗?
谢谢。
答案 0 :(得分:1)
为什么要使用线程代替async task?
异步任务实现方法 onProgressUpdate 和 publishProgress ,这样可以轻松显示和更新UI /进度对话框。
以下是一些示例代码:http://android-projects.de/2010/12/08/threading-in-android-apps-wir-entwickeln-einen-zahler/