android判斷dialog
① Android如何判斷當前窗口是Activity還是Dialog
Activity是Android四大組件之一,而Dialog不是Android的組件,Activity用於實現一個功能性窗口,而Dialog用於做出一些提示及一些選擇性操作,兩者應用的場景是不同的。
在程序中把這個窗口對象獲取到,通過instanceof來判斷這是對象是歸屬於Activity還是Dialog.
② Android 全局彈窗(Dialog)快速實現
項目中 雲信IM同一帳號,在多處登錄時,要實現互踢功能。
在收到被踢通知時,彈窗提示用戶被踢,點擊繼續跳轉到登錄界面,取消則關閉App
由於不知道用戶會在哪個界面操作時被踢,接受通知的那個Activity有可能已經失去上下文,導致空指針異常!從而無法 Toast 或 彈窗。
能實現 全局Dialog 就好了!
由於退出App的時候,要清除之前所有的Activity,其實就是退出登錄功能。
我採用 集合法 來實現的退出登錄 ,在BaseActivity中記錄所有打開過的Activity,然後遍歷清除。
然後在 BaseActivity 中調用 addActivity() ,不在贅述!
如果能獲取到用戶當前觀看的界面,然後將上下文傳過去,就可以實現全局Dialog
當前頁面也就是棧頂Activity,也就是最後添加的那個Activity。如下:
然後在使用的地方獲取
即:
注意:之所以返回AppCompatActivity,而不是Activity,
是因為彈出Dialog 需要 supportFragmentManager ,Activity 獲取不到
以上就可以實現全局Dialog了。
另外,上述Dialog是用DialogFragment寫的,感興趣可閱 《DialogFragment 去除內容區稜角背景(不規則圓角)》 ,附有工具類及用法。
③ Android如何獲取當前窗口的對象判斷它是Activity的類對象還是Dialog的類對象
您說具體點,什麼情況下獲取當前窗口的對象。
如果是在一個activity里獲取dialog彈出來沒有就是if(dialog!=null&&dialog.isshowing){//就是當前窗口是dialog界面 dialog.this就是當前窗口對象}
eles{//是當前activity 為窗口對象, activity.this}