我试图在我的方法doSomeWork();
中解散ProgressDialog之后执行方法printing();
,这似乎与其他方法重叠并且没有显示对话框。如果我注释方法doSomeWork();
,则对话框会正确显示,直到线程结束。
以下是我的方法printing();
public void printing()
{
final ProgressDialog printingDialog = ProgressDialog.show(this, "Printing...", "Please wait", true, false);
new Thread(new Runnable() {
@Override
public void run()
{
//something big executing here
}
}).start();
}
他是我的方法doSomework()
:
public void doSomeWork(){
Thread receiptPrint = new Thread(new Runnable() {
@Override
public void run() {
//something here
runOnUiThread(new Runnable() {
@Override
public void run() {
//another dialog here
}
});
}
});
}
在这里你可以看到我如何调用这两种方法:
private OnClickListener onClickPrint = new OnClickListener() {
public void onClick(final View v) {
Log.d("Button","Clicked on Print Order Button");
printing();
doSomeWork();
有人知道只有在doSomeWork()
完全完成后我才能执行printing();
吗?
答案 0 :(得分:2)
您可以使用异步任务代替使用线程。在preexecute方法中显示进度对话框,在完成打印操作后调用后台方法内的打印方法调用postexecute方法中的doSomeWork()。
答案 1 :(得分:2)
这是AsyncTask
的目的之一。它看起来与此类似:
public void onClick(final View v) {
new AsyncTask<Void, Void, Void>() {
@Override
protected void onPreExecute() {
//Show your progress dialog in here
super.onPreExecute();
}
@Override
protected Void doInBackground( Void... params ) {
printing();
return null;
}
@Override
protected void onPostExecute( Void result ) {
//Dismiss your progress dialog here
doSomeWork();
}
}.execute();
}
答案 2 :(得分:1)
你可以在android中使用Handler
。例如,考虑以下代码。你可以忽略处理程序内的对话框。它可能适合你。
private void printing(){
Thread receiptPrint = new Thread(new Runnable() {
@Override
public void run() {
retrieveEmails();
runOnUiThread(new Runnable() {
@Override
public void run() {
try{
//here your code executes
//after code executes do following:
uiHandler.sendEmptyMessage(0);
}catch(Exception ex){
errorHandler.sendEmptyMessage(0);
}
}
});
}
});
receiptPrint.start();
}
final Handler uiHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
//here execute doSomeWork()
}
};
final Handler errorHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
//do other stuff
}
};