2017-10-28 15 views
0

私はalertDialogを持っていますので、それ以上の処理のために入力が必要です。処理にはしばらく時間がかかりますので、処理方法を実行中に画像を表示したい場合は、alertDialogを閉じて画像を表示します。問題は、ダイアログが実際に終了する前にprocess()が呼び出されていることです。そのローディング時間中、プログラムは基本的に 'ハング'し、process()が終了するまで警告ダイアログを表示し、その後、そのイメージが分割されて表示され、その目的を破ります。後で処理する前にダイアログボックスを消す方法は?

process()メソッドで画像を表示しようとしましたが、同期メソッドでdialog.dismiss()を実行しようとしましたが、結果は変わりません。

alertDialogBuilder.setCancelable(true).setPositiveButton("OK", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 

     final String input = et.getText().toString(); 

     dialog.dismiss(); //finish this first 

     process(input); //then do this 

    } 
}); 

AlertDialog alertDialog = alertDialogBuilder.create(); 

alertDialog.show(); 
+0

のように単純でなければなりませんただ、 '異なるスレッド上process'を開始? – Tomer

+0

私はコーディングが新しく、このことを間違えていると謝ります。私はスレッドの匿名サブクラスの中にプロセス(入力)を入れてみましたが、少し速く完了する以外は同じ結果が得られます。 – GomuGomu

答えて

0

それは

final String input = et.getText().toString(); 
dialog.dismiss(); 

// run in background 
AsyncTask.execute(new Runnable() { 
    @Override 
    public void run() { 
    process(input); 
    } 
}); 
+0

これはトリックでした。あなたの答えをありがとう。 – GomuGomu

1

あなたはそう、あなたがこのセクションで画像を表示することができますし、同様にあなたのプロセスを開始

alertDialogBuilder.setOnDismissListener(new 
    DialogInterface.OnDismissListener() { 
      @Override 
      public void onDismiss(DialogInterface dialogInterface) { 
       //do work on dismiss of dialog 
      } 
    }); 

を使用することができます。プロセス終了時にコールバックリスナを追加し、コールバックを使用して、プロセスが終了したときにイメージを非表示にします。

+0

これは依然としてプロセス(入力)の優先順位付けを行い、あとで残念ながらイメージを表示しました。あなたの答えをありがとう。 – GomuGomu

関連する問題