Android 全局彈窗(Dialog)快速實(shí)現(xiàn)

項(xiàng)目中 云信IM同一帳號(hào)仓蛆,在多處登錄時(shí),要實(shí)現(xiàn)互踢功能募胃。

需求

在收到被踢通知時(shí),彈窗提示用戶被踢畦浓,點(diǎn)擊繼續(xù)跳轉(zhuǎn)到登錄界面痹束,取消則關(guān)閉App

分析

由于不知道用戶會(huì)在哪個(gè)界面操作時(shí)被踢,接受通知的那個(gè)Activity有可能已經(jīng)失去上下文讶请,導(dǎo)致空指針異常祷嘶!從而無法 Toast 或 彈窗屎媳。

能實(shí)現(xiàn) 全局Dialog 就好了!

實(shí)現(xiàn)的簡單方式

由于退出App的時(shí)候论巍,要清除之前所有的Activity烛谊,其實(shí)就是退出登錄功能。

我采用 集合法 來實(shí)現(xiàn)的退出登錄嘉汰,在BaseActivity中記錄所有打開過的Activity丹禀,然后遍歷清除。


/**
 * <pre>
 *     author : jake
 *     time   : 2018/03/23
 *     function   :  App
 *     version: 1.0
 * </pre>
 */
class RiseApp : MultiDexApplication() {

    lateinit var activities: ArrayList<Activity>

    companion object {
        var mContext: RiseApp? = null
        fun getInstance(): RiseApp {
            return mContext!!
        }
    }


    fun addActivity(activity: Activity) {
        activities.add(activity)
    }

    fun clearActivity() {
        activities.forEach {
            it.finish()
        }
        activities.clear()
    }
}

然后在 BaseActivity 中調(diào)用 addActivity() 鞋怀,不在贅述双泪!

如果能獲取到用戶當(dāng)前觀看的界面,然后將上下文傳過去密似,就可以實(shí)現(xiàn)全局Dialog

當(dāng)前頁面也就是棧頂Activity焙矛,也就是最后添加的那個(gè)Activity。如下:

//    當(dāng)前Activity也就是棧頂Activity辛友,獲取到后以實(shí)現(xiàn) 全局dialog
    fun currentActivity(): AppCompatActivity {
        return activities[activities.lastIndex] as AppCompatActivity
    }

然后在使用的地方獲取

 NIMClient.getService(AuthServiceObserver::class.java).observeOnlineStatus(object : Observer<StatusCode> {
            override fun onEvent(status: StatusCode?) {
                status?.let {
                    if (it.shouldReLogin()){
                        initIMLogin()
                    }else if (status.wontAutoLogin()){
                        exitDialog.show(RiseApp.getInstance().currentActivity().supportFragmentManager) {
                            loginOut()
                        }
                    }
                }
            }

        }, true)

即:

exitDialog.show(RiseApp.getInstance().currentActivity().supportFragmentManager) {
     loginOut()
 }

注意:之所以返回AppCompatActivity薄扁,而不是Activity,
是因?yàn)閺棾鯠ialog 需要 supportFragmentManager 废累,Activity 獲取不到


以上就可以實(shí)現(xiàn)全局Dialog了邓梅。

另外,上述Dialog是用DialogFragment寫的邑滨,感興趣可閱《DialogFragment 去除內(nèi)容區(qū)棱角背景(不規(guī)則圓角)》日缨,附有工具類及用法。

うす?まき ナルト
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掖看,一起剝皮案震驚了整個(gè)濱河市匣距,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哎壳,老刑警劉巖毅待,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異归榕,居然都是意外死亡尸红,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門刹泄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來外里,“玉大人,你說我怎么就攤上這事特石≈鸦龋” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵姆蘸,是天一觀的道長墩莫。 經(jīng)常有香客問我芙委,道長,這世上最難降的妖魔是什么贼穆? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任题山,我火速辦了婚禮,結(jié)果婚禮上故痊,老公的妹妹穿的比我還像新娘顶瞳。我一直安慰自己,他們只是感情好愕秫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布慨菱。 她就那樣靜靜地躺著,像睡著了一般戴甩。 火紅的嫁衣襯著肌膚如雪符喝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天甜孤,我揣著相機(jī)與錄音协饲,去河邊找鬼。 笑死缴川,一個(gè)胖子當(dāng)著我的面吹牛茉稠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播把夸,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼而线,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了恋日?” 一聲冷哼從身側(cè)響起膀篮,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎岂膳,沒想到半個(gè)月后誓竿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谈截,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年烤黍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片傻盟。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嫂丙,靈堂內(nèi)的尸體忽然破棺而出娘赴,到底是詐尸還是另有隱情,我是刑警寧澤跟啤,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布诽表,位于F島的核電站唉锌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏竿奏。R本人自食惡果不足惜袄简,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望泛啸。 院中可真熱鬧绿语,春花似錦、人聲如沸候址。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岗仑。三九已至匹耕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間荠雕,已是汗流浹背稳其。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炸卑,地道東北人既鞠。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像矾兜,于是被迫代替她去往敵國和親损趋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容