ProgressDialog解散后如何立即执行指令/方法?

时间:2013-03-29 17:39:42

标签: android progressdialog

我试图在我的方法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();吗?

3 个答案:

答案 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
    }
};