[英]How to display dialog on any screen (fragment or activity) in android
用戶在片段/活動“A”中
在屏幕“A”的 onCreate() 中,我在后台線程上觸發了一些網絡調用。 用戶導航到其他一些片段/活動,現在當我從網絡獲得響應時,無論用戶在應用程序中的哪個位置,我都需要顯示對話框。
我怎樣才能實現這種行為? 使用 DialogFragment
如果您想在后台操作響應中將FragmentA
顯示為對話框,請將 Fragment 超類更改為FragmentDialog
。 這僅在您使用 Fragment 而不是 Activity 時有效。 並通過以下代碼顯示:
fun showResponse(fragmentManager:FragmentManager) {
val responseFragment = FragmentA()//or name of your Fragment
responseFragment.show(fragmentManager, "")
}
如果要顯示活動中的對話框或不顯示FragmentA
,請使用超類DialogFragment
創建類ResponseDialog
。 在onCreateDialog
方法中的此類中,您可以設計對話框(添加文本、按鈕、圖像...)。
class ResponseDialog: DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle): Dialog {
return activity?.let {
val builder = AlertDialog.Builder(it)
builder.setMessage("data downloaded")
.setPositiveButton("Ok",
DialogInterface.OnClickListener { dialog, id ->
//positive button action here dissmis dialog
})
builder.create()
} ?: throw IllegalStateException("Activity cannot be null")
}
}
並通過這種方法顯示它:
fun showResponse(fragmentManager:FragmentManager) {
val responseFragment = ResponseDialog()
responseFragment.show(fragmentManager, "")
}
創建一個透明活動並在其 onCreate 方法中顯示您的對話框。 為對話框設置 OnDismissListener 並在此回調中完成活動。 在您需要顯示對話框的每個地方,您都可以開始這個透明的活動
這取決於你想要做的復雜程度。 一個“好方法”是在你的應用程序中有一些 BaseFragment、BaseActivity、BaseViewModel(BasePresenter)。 我說“好方法”,因為你可能知道“擴展是邪惡的”和“喜歡組合而不是繼承”的概念,所以你應該注意不要讓基類太重。
但是您可以在基類中放置一些錯誤處理(通知)邏輯。 例如,您可以擁有一些“單例”或生命周期等於您瀏覽的屏幕的東西。 你把網絡邏輯放在那里。
作為不同活動的一部分,您可以觀察來自不同虛擬機的結果。 只是普通的觀察者模式,你可能會從觀察者返回一個“處理”的布爾結果,所以你只在一個活動中顯示對話框。
當您在 VM 中收到結果時 - 調用(公開一些數據流等)BaseActivity 以顯示對話框。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.