随便封装一下BaseActivity 之 二

接着上回,菊花也稍微封装一下

老规矩,上码

一、定义一个菊花interface,真正实现菊花的接口类

open interface ILoading {

    /**
     * 获取加载服务
     */
    fun getLoad(): Any?

    /**
     * 注册目标view
     */
    fun register(target: Any)

    /**
     * 注册目标view
     */
    fun register(target: Any, onLoadSirListener: OnReloadListener)

    /**
     * 显示|隐藏菊花(不覆盖目标view)
     */
    fun showLoadingView(show: Boolean)

    /**
     * 显示|隐藏菊花(覆盖目标view)
     */
    fun showLoadingCoverView(show: Boolean)

    /**
     * 显示动画view
     */
    fun showAnimateView()

    /**
     * 显示错误view
     */
    fun showErrorView()

    /**
     * 显示空view
     */
    fun showEmptyView()
}

二、再定义一个菊花代理interface

interface LoadingInterface {

    fun initLoading(): ILoading?

}

三、实现菊花代理接口

class LoadingManager : LoadingInterface {

    private var delegateInterface: LoadingInterface? = null

    companion object {
        @Volatile
        private var sInstance: LoadingManager? = null

        fun get(): LoadingManager {
            if (sInstance == null) {
                synchronized(LoadingManager::class.java) {
                    if (sInstance == null) {
                        sInstance = LoadingManager()
                    }
                }
            }
            return sInstance!!
        }
    }

    fun init(delegateInterface: LoadingInterface) {
        if (this.delegateInterface != null) {
            FLogUtils.w("多次初始化菊花!!--请检查代码")
            return
        }
        this.delegateInterface = delegateInterface
    }

    override fun initLoading(): ILoading? {
        if (delegateInterface == null) {
            FLogUtils.w("未初始化菊花--请实现LoadingInterface接口,并调用LoadSirManager.init进行初始化")
        }
        return delegateInterface?.initLoading()
    }

}

换汤不换要,也是静态代理。

四、再加上一个重新加载的接口,基本上 基础接口方法都差不多了

interface OnReloadListener {

    fun onReload(v: View?)
}

五、接下来就是各个接口的实现了,首先是菊花实现ILoadingImpl

class ILoadingImpl : ILoading {

    private var loadService: LoadService<*>? = null

    override fun getLoad(): LoadService<*>? {
        return loadService
    }

    override fun register(target: Any) {
        loadService = LoadSir.getDefault().register(target)
    }

    override fun register(
        target: Any,
        onReloadListener: OnReloadListener
    ) {
        loadService = LoadSir.getDefault().register(
            target
        ) {
            onReloadListener.onReload(it)
        }
    }

    override fun showLoadingView(show: Boolean) {
        loadService?.showCallback(if (show) LoadingCallback::class.java else SuccessCallback::class.java)
    }

    override fun showLoadingCoverView(show: Boolean) {
        loadService?.showCallback(if (show) LoadingCoverCallback::class.java else SuccessCallback::class.java)
    }

    override fun showAnimateView() {
        loadService?.showCallback(AnimateCallback::class.java)
    }

    override fun showErrorView() {
        loadService?.showCallback(ErrorCallback::class.java)
    }

    override fun showEmptyView() {
        loadService?.showCallback(EmptyCallback::class.java)
    }

}

这里利用LoadSir库来实现菊花

六、实现菊花代理LoadSirDelegateImpl

class LoadSirDelegateImpl : LoadingInterface {
    override fun initLoading(): ILoading? {
        return ILoadingImpl()
    }
}

七、最后就是菊花配置了

object LoadSirExt {

    /**
     * 初始化
     * @param loadSirLayoutInterface 实现接口可自定义callback布局
     */
    fun init(loadSirLayoutInterface: LoadSirLayoutInterface? = null) {
        configLoadSir()
        LoadSirSimpleLayout.get().init(loadSirLayoutInterface)
        LoadingManager.get().init(LoadSirDelegateImpl())
    }

    /**
     * 配置LoadSir
     */
    private fun configLoadSir() {
        LoadSir.beginBuilder()
            .addCallback(ErrorCallback())
            .addCallback(EmptyCallback())
            .addCallback(AnimateCallback())
            .addCallback(LoadingCallback())
            .addCallback(LoadingCoverCallback())
            .setDefaultCallback(SuccessCallback::class.java)
            .commit()
    }
}

这里的LoadSirLayoutInterface 其实也是通过静态代理,自定义LoadSir的各种布局,此处就不贴代码了

 

这样菊花与BaseActivity也封装好了。

稍微总结一下:

都是利用代理,来实现封装、扩展。 没什么技术含量,就是基本的封装。

一、这些类可以封装成一个base库

1、BaseActivity

2、DispenseToolbar、DispenseToolbarInterface、DispenseToolbarStyle、DispenseToolbarStyleDelegate

3、ILoading、LoadingInterface、LoadingManager、OnReloadListener

二、另外可以把菊花也封装成一个库,如这里利用LoadSir加以封装

1、ILoadingImpl、LoadSirDelegateImpl、LoadSirExt、LoadSirLayoutInterface

我们这样简单封装过后,撸起来也方便,扩展起来也方便

ps:我自己瞎搞的,不喜莫喷

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值