搜尋

首頁  >  問答  >  主體

android - 我能否实现一个不需主动传入上下文的dialog?

既然我可以通过注册activity生命周期回调的方法在任意地方获取到最后一个onresume的activity,
那么我是否可以创建一个工具类,工具类利用这个activity来构造dialog呢?
这样做有什么坏处呢?
我现在用一个toast工具类,在工具类中直接使用了application的context,这样做可以吗?

阿神阿神2771 天前598

全部回覆(6)我來回復

  • 巴扎黑

    巴扎黑2017-04-18 09:18:44

    可以是可以,但為什麼要這麼做?封裝個dialog工具類傳activity就行了。至於toast,用applicationContext是一個不錯的做法。

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-18 09:18:44

    構造Dialog直接把Activity的context傳過去就可以了呀,不需要你整回調啥的這麼麻煩的。你可以參考下別人封裝的工具庫,看看別人的思路。

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-18 09:18:44

    抖個機靈,你可以把一個activity當做dialog,只需要把他的主題設定為dialog,官網說的

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-18 09:18:44

    原本系統層級的dialog是很方便的只需要傳入applicationContext就可以實現一個彈框,但是由於各個廠商的過度定制(我遇到小米對系統級別的彈框定制令人噁心,同一個版本,更新一次實現就修改一次),所以最好還是如上面所有的可以用一個定制dialog格式的activity作為彈出框來實現,目前很多家都是這樣的,像tencent的信鴿推送也就是這樣做的,能保證成功開啟而不受定制之苦。

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-18 09:18:44

    安卓的Dialog,不管怎麼樣你都要傳Context。傳 Activity 其實也就等於傳了 Context。利用Application的Context是不行的;再者,static的Context是不建議的,有可能會造成記憶體洩漏。

    不過你可以透過依賴注入等方法來隱藏或簡化這一過程。

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:18:44

    不能(雖然我想表示不建議)
    建設你已經實現了,我們猜一下這樣會發生什麼.

    1. 網路請求發出去了,然後頁面被結束,但是請求沒有取消.請求返回時彈了一個對話框.這個Dialog怎麼解釋?如果這Dialog後續有操作,操作有數據,這些處理的代碼放在哪裡?也行你成功把這些資料放在Dialog實例裡,還new了一個內部類別.那麼恭喜,剛剛被結束的Activity記憶體洩漏了

    2. 一個萬能的Dialog,怎麼限制人去使用?可以在任何地方彈,程式碼結構還能維護?

    3. 小專案,直接根據需求抽個BaseActivity,處理好程式碼結構彈個對話框也沒多麻煩.理由不充分.

    回覆
    0
  • 取消回覆