簡體   English   中英

如何在android中的任何屏幕(片段或活動)上顯示對話框

[英]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, "")
}

Android 對話框文檔

創建一個透明活動並在其 onCreate 方法中顯示您的對話框。 為對話框設置 OnDismissListener 並在此回調中完成活動。 在您需要顯示對話框的每個地方,您都可以開始這個透明的活動

這取決於你想要做的復雜程度。 一個“好方法”是在你的應用程序中有一些 BaseFragment、BaseActivity、BaseViewModel(BasePresenter)。 我說“好方法”,因為你可能知道“擴展是邪惡的”和“喜歡組合而不是繼承”的概念,所以你應該注意不要讓基類太重。

但是您可以在基類中放置一些錯誤處理(通知)邏輯。 例如,您可以擁有一些“單例”或生命周期等於您瀏覽的屏幕的東西。 你把網絡邏輯放在那里。

作為不同活動的一部分,您可以觀察來自不同虛擬機的結果。 只是普通的觀察者模式,你可能會從觀察者返回一個“處理”的布爾結果,所以你只在一個活動中顯示對話框。

當您在 VM 中收到結果時 - 調用(公開一些數據流等)BaseActivity 以顯示對話框。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM