[Android] 設置AlertDialog打開后不消失


最近項目收尾,一堆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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM