Skip to content

zzechao/DialogQueue

Repository files navigation

介绍

DialogQueue 是一个可保活的弹窗队列库,可以在其他activity绑定显示,也可以在其他fragment绑定显示,还可以在其他activity和fragment都满足才显示; 只要设置保活变量isKeepALive,以及对应绑定activity或fragment的class;同时android应用一般情况下提供4种不同的dialog形式,(1)dialog(2)fragmentDialog (3)viewDialog(4)activityDialog 可以同时使用,sdk已经构建了对应4种dialog的工厂模式,您只要实现具体dialog创建方法,同时你可以根据情况创建自己dialog的工厂模式, 去构建自己专属模式的dialog。

效果图

image

用法

根目录build.gradle中添加mavenCentral()

    repositories {
        mavenCentral()
    }

model build.gradle添加

     implementation "io.github.zzechao:dialogqueue:1.0.2.1"

当前版本:1.0.2.1

dialog创建队列弹窗class,都要继承IDialog

    /**
     * dialog 的实现类要继承IDialogQ接口,用于判断当前生命周期的activity或者fragment是不是队列的弹窗
     */
    class ActivityDialog : AppCompatActivity(), IDialogQ {}
    class CommonDialog(context: Context) : BaseDialog(context), IDialogQ {}
    class FragmentDialog : DialogFragment(), IDialogQ {}
    class ViewDialog(context: Context, val content: String) : CenterPopupView(context), IDialogQ {}

添加activityDialog

    /**
     * 调用DialogEx的addActivityDialog方法添加ActivityDialog进队列, 
     * builder要用到Coroutines的suspendCancellableCoroutine返回activity的对象(com.zhouz.dialogqueue.DialogEx.addActivityDialog)
     * @param extra 传递信息字段
     * @param priority 优先级
     * @param builder 弹窗对象构建的闭包方法
     * @return 工厂id
     */
    fun addActivityDialog(extra: String = "", priority: Int = 0 , builder: suspend (Activity, String) -> ComponentActivity): Int{}

    DialogEx.addActivityDialog("${index + 1}") { activity, extra ->
        val content = "测试 addActivityDialog $extra"
        activity.startReturnActivity(ActivityDialog::class.java, Bundle().apply {
            putString("content", content)
        })
    }

添加fragmentDialog

    /**
     * 调用DialogEx的addFragmentDialog方法添加FragmentDialog进队列(com.zhouz.dialogqueue.DialogEx.addFragmentDialog)
     * @param extra 传递信息字段
     * @param priority 优先级
     * @param builder 弹窗对象构建的闭包方法
     * @return 工厂id
     */
    fun addFragmentDialog(extra: String = "", priority: Int = 0 , builder: suspend (Activity, String) -> DialogFragment): Int

    DialogEx.addFragmentDialog("${index + 1}") { activity, extra ->
        val content = "测试 addFragmentDialog $extra"
        val fragmentDialog = FragmentDialog.newInstance(extra, content)
        fragmentDialog.show((activity as FragmentActivity).supportFragmentManager, "FragmentDialog")
        fragmentDialog
    }

添加commonDialog

    /**
     * 调用DialogEx的addCommonDialog方法添加CommonDialog进队列(com.zhouz.dialogqueue.DialogEx.addCommonDialog)
     * @param extra 传递信息字段
     * @param priority 优先级
     * @param builder 弹窗对象构建的闭包方法
     * @return 工厂id
     */
    fun addCommonDialog(extra: String = "", priority: Int = 0 , builder: suspend (Activity, String) -> Dialog): Int

    DialogEx.addCommonDialog("${index + 1}") { activity, extra ->
        val dialog = CommonDialog(activity)
        dialog.setTitle("CommonDialog")
        dialog.setContent("测试 addCommonDialog $extra")
        dialog.show()
        dialog
    }

添加viewDialog

    /**
     * 调用DialogEx的addViewDialog方法添加ViewDialog进队列, 
     * builder要用到Coroutines的suspendCancellableCoroutine在doOnAttach返回view的对象,
     * 这里用了XPopup快速开发(com.zhouz.dialogqueue.DialogEx.addViewDialog)
     * @param extra 传递信息字段
     * @param priority 优先级
     * @param builder 弹窗对象构建的闭包方法
     * @return 工厂id
     */
    fun addViewDialog(extra: String = "", priority: Int = 0 , builder: suspend (Activity, String) -> View): Int

    DialogEx.addViewDialog("${index + 1}") { activity, extra ->
        withTimeout(2000L) {
            suspendCancellableCoroutine { con ->
                val content = "测试 addViewDialog $extra"
                val view = ViewDialog(activity, content)
                view.doOnAttach {
                    con.resume(it)
                }
                XPopup.Builder(activity)
                    .isDestroyOnDismiss(true) //对于只使用一次的弹窗,推荐设置这个
                    .isViewMode(true)
                    .isLightStatusBar(true)// 是否是亮色状态栏,默认false;亮色模式下,状态栏图标和文字是黑色
                    .customHostLifecycle((activity as AppCompatActivity).lifecycle)
                    .asCustom(view)
                    .show()
                con.invokeOnCancellation {
                    view.dismiss()
                }
            }
        }
    }

About

针对 dialogActivity,dialogFragmnet,baseDialog,或者viewdialog(XPopup)等的可保活的弹窗队列

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages