標籤:android io os ar sp on 問題 log 代碼
Android alertDialog中左中右三個按鈕,點擊按鈕的時候,即使沒調用dismiss方法,系統也會預設的去調用,而把這個對話方塊被關閉掉,但是我們的一些實際需求,就需要保留這個對話方塊不動,例如輸入校正碼,密碼之類的校正問題,如果使用者輸入錯誤,而關閉後彈出對話方塊,就很彆扭了。這裡有個方案可以解決這個問題,使得即使按鈕事件發生了,也不會關閉對話方塊。核心思想是欺騙一下系統,在點擊事件裡,修改該對話方塊的顯示狀態為關閉,則系統就不會去關閉該對話方塊了。具體實現代碼如下:
/** @author sanji* 假設對話方塊已經關閉,欺騙系統,以保持輸入視窗*/
private void setDialogNotShow(){
if(mDialogInterface!=null){
try {
Field field = mDialogInterface.getClass() .getSuperclass().getDeclaredField( "mShowing" );
field.setAccessible( true ); // 將mShowing變數設為false,表示對話方塊已關閉
field.set(mDialogInterface, false );
} catch (Exception e){
e.printStackTrace();
}
}
}
mDialogInterface是點擊對話方塊按鈕事件傳進來的DialogInterface dialog參數,如果再需要銷毀該對話方塊的話,則:
private void closeDialogOfPINorPUK(){
if(mDialogInterface!=null){
try {
Field field = mDialogInterface.getClass() .getSuperclass().getDeclaredField( "mShowing" );
field.setAccessible( true );
field.set(mDialogInterface, true );
mDialogInterface.dismiss();
}catch (Exception e){
e.printStackTrace();
}
}
}
Android Alert Dialog解決點擊按鈕對話方塊不關閉的問題