1

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
                    }
                });

            }
            });
}

ここでは、これら 2 つのメソッドをどのように呼び出しているかを確認できます。

    private OnClickListener onClickPrint = new OnClickListener() {

    public void onClick(final View v) {

            Log.d("Button","Clicked on Print Order Button");

                    printing();
                    doSomeWork();

完全に終了するdoSomeWork()ときにのみ実行する方法を知っている人はいますか?printing();

4

3 に答える 3

2

スレッドを使用する代わりに、非同期タスクを使用できます。preexecute メソッドで進行状況ダイアログを表示する 印刷操作が完了した後、background メソッド内で印刷メソッドを呼び出し、postexecute メソッド内で doSomeWork() を呼び出します。

于 2013-03-29T17:50:04.240 に答える
2

これは、 の目的の 1 つです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();
}
于 2013-03-29T18:42:57.620 に答える
1

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
    }
};
于 2013-03-29T17:52:07.190 に答える