最近項目收尾,一堆bug要改,還要對用戶操作體驗做一些優化,也是忙的不行。周末難得清閑,出去逛逛,看看風景,還好因為習大大要來,南京最近的天氣還不錯,只是苦了當地的不少農民工,無活可干,無錢可拿。想想覺得自己已經算是幸運的了,心存感激,好好工作。
原文地址請保留 http://www.cnblogs.com/rossoneri/p/4150001.html
整理一下以前查過的東西,可惜筆記本沒記多少資料博客的網址,沒法貼資料地址。
關於本文,是要滿足一個需求:
打開一個自定義對話框之后,再點擊按鈕,希望彈出一個確認之類的對話框顯示在前端,同時不希望原來的對話框消失。
方法就是用反射機制獲取相關字段進行設置:
Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing"); field.setAccessible(true); field.set(dialog, false);
關於getDeclaredField()往后再研究下。
寫了個簡單的demo:
1 public class MainActivity extends ActionBarActivity { 2 3 Button btn; 4 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.activity_main); 9 10 btn = (Button) findViewById(R.id.btn); 11 btn.setOnClickListener(new OnClickListener() { 12 13 @Override 14 public void onClick(View v) { 15 // TODO Auto-generated method stub 16 AlertDialog.Builder builder = new Builder(MainActivity.this, 17 AlertDialog.THEME_HOLO_LIGHT); 18 builder.setTitle("Test"); 19 builder.setMessage("Try to push the OK button and the dialog won`t be dismissed, do it now !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); 20 builder.setPositiveButton("OK", 21 new DialogInterface.OnClickListener() { 22 23 @Override 24 public void onClick(DialogInterface dialog, 25 int which) { 26 // TODO Auto-generated method stub 27 try { 28 Field field = dialog.getClass() 29 .getSuperclass() 30 .getDeclaredField("mShowing"); 31 field.setAccessible(true); 32 field.set(dialog, false); // 此處設為true則可以關閉 33 } catch (Exception e) { 34 e.printStackTrace(); 35 } 36 37 AlertDialog.Builder confirmDlg = new Builder( 38 MainActivity.this, 39 AlertDialog.THEME_HOLO_DARK); 40 confirmDlg.setTitle("confirm"); 41 confirmDlg 42 .setMessage("Do you want to do the action?"); 43 confirmDlg.create().show(); 44 45 } 46 }); 47 48 builder.setNegativeButton("Cancel", 49 new DialogInterface.OnClickListener() { 50 51 @Override 52 public void onClick(DialogInterface dialog, 53 int which) { 54 // TODO Auto-generated method stub 55 try { 56 Field field = dialog.getClass() 57 .getSuperclass() 58 .getDeclaredField("mShowing"); 59 field.setAccessible(true); 60 field.set(dialog, true); 61 } catch (Exception e) { 62 e.printStackTrace(); 63 } 64 } 65 }); 66 67 builder.create().show(); 68 } 69 }); 70 71 } 72 }