2017-10-28 104 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

我是新來的編碼,所以我很抱歉,如果我做錯了。我試圖把進程(輸入)放入Thread的一個匿名子類中,但是我仍然得到相同的結果,除此之外它更快完成一些。 – 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

相關問題