Android Dialog點選按鈕不關閉,控制視窗的顯示和關閉
阿新 • • 發佈:2019-01-03
想象一下這樣的一個情景:彈出一個對話方塊,裡面可以編輯sql語句,編輯好以後點選確定按鈕,執行sql,此時對話方塊也會消失。如果sql順利執行,這種互動還是很不錯的。但是一旦sql執行出錯,對話方塊還是會關閉,對話方塊中的sql也就沒有了,只能重新編輯。如果sql很複雜,那麼這種互動完全可以毀掉你的這個應用。好比註冊資訊,填了n多項,只有一項出錯,介面卻把所有填好的資訊都丟失掉...使用者會恨不得殺了你、
dialog在預設情況下只要你點選了它的按鈕,它都要進行關閉,為了在上述情況中擁有良好的互動性,必須得找出一種辦法,可以讓dialog在需要關閉的時候再進行關閉。
下段程式碼也是在網上找的,並非自己研究,特此宣告。
通過上面兩個方法,我們可以根據需求來控制dialog的關閉和顯示。public class DialogDemo extends Activity { AlertDialog dialogDemo; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); AlertDialog.Builder dialogBuild = new AlertDialog.Builder(this); dialogBuild.setPositiveButton("sure", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (true) { //該條件下不關閉dialog keepDialogOpen(dialogDemo); //...doSomeThing(); } else { //該條件下關閉dialog closeDialog(dialogDemo); //此句最好不要省略,否則在有些情況下dialog不關閉 dialog.dismiss(); } } }); dialogBuild.setNegativeButton("cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //取消按鈕在任何條件下都關閉 closeDialog(dialogDemo); //此句最好不要省略,否則在有些情況下dialog不關閉 dialog.dismiss(); } }); dialogDemo = dialogBuild.create(); dialogDemo.show(); } //保持dialog不關閉的方法 private void keepDialogOpen(AlertDialog dialog) { try { java.lang.reflect.Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing"); field.setAccessible(true); field.set(dialog, false); } catch (Exception e) { e.printStackTrace(); } } //關閉dialog的方法 private void closeDialog(AlertDialog dialog) { try { java.lang.reflect.Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing"); field.setAccessible(true); field.set(dialog, true); } catch (Exception e) { e.printStackTrace(); } } }