Android中“可恢復(fù)”listener的Dialog封裝

BSSmartDialog設(shè)計說明

概述

Android應(yīng)用開發(fā)中,如果需要彈出一個Dialog愕把,Google SDK推薦的做法是使用DialogFragment作為容器。這樣,在一些特殊操作情景下(Configuration Change拴念,如旋轉(zhuǎn)屏幕)氧映,開發(fā)者可以利用Fragment豐富的生命周期事件處理好Dialog的邏輯春畔。我們知道,在發(fā)生Configuration Change時岛都,Activity會銷毀并立即重建律姨。這樣就帶來一個問題,在Configuration Change之前設(shè)置給Dialog的listener對象臼疫,在Activity重建后是否還能夠正常接收處理Dialog上的事件择份?

方案

Activity被重建時,所關(guān)聯(lián)的DialogFragment也會跟著重建烫堤。由此得到啟發(fā):我們只要讓新重建的DialogFragment所產(chǎn)生的事件荣赶,能夠傳到新重建的Host(即打開該DialogFragment的Activity或Fragment)凤价;也就是說,把Dialog的listener設(shè)置成該Host拔创,那么listener的功能就不會受到Configuration Change的影響了利诺。該BSSmartDialog嘗試封裝了這樣的邏輯,它具備如下一些功能點:

  • 支持在Activity剩燥,或者Fragment上彈框
  • 支持指定一個任意布局layout慢逾,以Dialog的形式彈出
  • 可以設(shè)置在Activity重建的情況下,DialogFragment是否自動恢復(fù)(再次彈出)灭红。默認(rèn)為false侣滩,不彈出
  • 封裝了AlertDialog,支持排隊:在同一個Activity/Fragment上連續(xù)調(diào)用彈框時变擒,前一個dismiss后胜卤,后一個才會show
  • 封裝了AlertDialog,可以修改title赁项,message葛躏,button的color、textsize屬性

使用范例

  1. AlertDialog樣式的使用

BSSmartDialogUtils
里提供了幾個static調(diào)用方法悠菜。其中參數(shù)最多的方法如下:

BSSmartDialogUtils.showAlertDialog(Object activityOrFragment,
                                       CharSequence title,
                                       CharSequence message,
                                       CharSequence positiveButtonText,
                                       CharSequence negativeButtonText,
                                       CharSequence neutralButtonText,
                                       BSStyleParam styleParam,
                                       boolean autoRestore,
                                       DialogInterface.OnClickListener onClickListener,
                                       String tag)
  • 彈一個普通的類似“確定/取消”的對話框:可以按需選用參數(shù)較少的簡單方法
  • 如果需要在頁面重建時(Configuration Change)自動恢復(fù)彈框舰攒,設(shè)置autoRestore為true即可
  • 如果期望恢復(fù)彈框后,按鈕的listener能重新連接上悔醋,則需設(shè)置onClickListener為該DialogFragment的Host(maybe
    Activity or Fragment)
  • 如果要修改默認(rèn)title摩窃,message,button上的color芬骄,textsize樣式猾愿,可以傳入styleParam參數(shù)
  1. 一個任意布局的(水平居中)彈框(假設(shè)布局文件為abc)

BSSmartDialog smartDialog = BSSmartDialog.newInstance()
                .setLayoutId(R.layout.share_layout)
                .setDimAmount(0.3f)
                .setShowBottom(false)
                .setOnSmartDialogCreateListener(new BSSmartDialog.OnSmartDialogCreateListener() {
                    @Override
                    public void onSmartDialogCreate(BSViewHolder holder, BSSmartDialog dialog) {
                        Button button = holder.getView(R.id.action_button);
                        ...
                        BSSmartDialogUtils.dismiss(MainActivity.this, Tag_ShareDialog);
                    }
                });
        smartDialog.setAutoRestore(false).setTag(Tag_ShareDialog);
        smartDialog.show(getSupportFragmentManager());

最后希望對大家有所幫助,有問題歡迎討論账阻!
Github地址: https://github.com/chennyshan/BSSmartDialog

參考

NiceDialog: https://github.com/Othershe/NiceDialog

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蒂秘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子淘太,更是在濱河造成了極大的恐慌姻僧,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒲牧,死亡現(xiàn)場離奇詭異撇贺,居然都是意外死亡,警方通過查閱死者的電腦和手機冰抢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門松嘶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人挎扰,你說我怎么就攤上這事翠订』荷” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵蕴轨,是天一觀的道長港谊。 經(jīng)常有香客問我,道長橙弱,這世上最難降的妖魔是什么歧寺? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮棘脐,結(jié)果婚禮上斜筐,老公的妹妹穿的比我還像新娘。我一直安慰自己蛀缝,他們只是感情好顷链,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著屈梁,像睡著了一般嗤练。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上在讶,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天煞抬,我揣著相機與錄音,去河邊找鬼构哺。 笑死革答,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的曙强。 我是一名探鬼主播残拐,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼碟嘴!你這毒婦竟也來了溪食?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤臀防,失蹤者是張志新(化名)和其女友劉穎眠菇,沒想到半個月后边败,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體袱衷,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年笑窜,在試婚紗的時候發(fā)現(xiàn)自己被綠了致燥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡排截,死狀恐怖嫌蚤,靈堂內(nèi)的尸體忽然破棺而出辐益,到底是詐尸還是另有隱情,我是刑警寧澤脱吱,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布智政,位于F島的核電站,受9級特大地震影響箱蝠,放射性物質(zhì)發(fā)生泄漏续捂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一宦搬、第九天 我趴在偏房一處隱蔽的房頂上張望牙瓢。 院中可真熱鬧,春花似錦间校、人聲如沸矾克。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胁附。三九已至,卻和暖如春滓彰,著一層夾襖步出監(jiān)牢的瞬間汉嗽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工找蜜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留饼暑,地道東北人。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓洗做,卻偏偏與公主長得像弓叛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子诚纸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348