Android基类整理优化

背景

在项目中,经常会抽离各种基类,要使用的时候,直接继承即可;

比较常见的,如BaseWebActivity,BaseTitleBarActivity、BaseListViewActivity、BaseVideoActivity

  • BaseWebActivity

带有webview功能,子类只需要传入url即可;

  • BaseTitleBarActivity

带有头部titleBar功能,子类可自定义传入title(顶部文案)、menu(右侧文案)...

  • BaseListViewActivity

带有listView列表功能,同时支持下拉刷新、上拉加载更多功能;

  • BaseVideoActivity

带有阿里云播放器功能,对阿里云播放进行初始化;

痛点

单一功能的基类确实能满足绝大部分的需求,但由于使用方式是继承,这就导致了无法进行功能组合。

如某个页面需要listview、video的功能,由于java里面只支持单继承,无法满足同时继承两个基类,这就需要额外的开发工作;

方案

将基类改造为接口,使用实现的方式来接入,这样由于java里面是支持多实现,这样就可以对各种基础功能进行组合使用,保证了功能的职责单一性,同时也满足了高内聚低耦合的设计思路。

BaseWebActivity -> IWebViewHelper

/**
 * 基于BaseWebActivity,改造为IWebViewHelper
 **/
class IWebViewHelper{

	fun binding(fragment: Fragment, observer: IWebViewObserver) {
        // 初始化代码
        ...
    }

    fun binding(activity: Activity, observer: IWebViewObserver) {
    	// 初始化代码	
        ...
    }

	fun unBinding() {
        // 解绑 防止内存泄漏
        ...
    }
    
    interface IWebViewObserver {
        fun getWebView(): WebView
    
        fun getWebViewUrl(): String
    
        fun isOverrideUrlLoading(view: WebView?, url: String?): Boolean = false
    
        fun needLoadNow(): Boolean = true
    
        fun getTitleTextView(): TextView?
    }

}

// 使用
val helper = IWebViewHelper()
helper.binding()
helper.unBinding()

BaseListViewActivity -> IBaseListHelper

class IBaseListHelper<T, K : BaseViewHolder> : BaseQuickAdapter.RequestLoadMoreListener,
    SwipeRefreshLayout.OnRefreshListener {
        
    fun binding(fragment: Fragment, observer: IBaseListObserver<T, K>) {
        // 初始化代码	
        ...
    }

    fun binding(content: Activity, observer: IBaseListObserver<T, K>) {
        // 初始化代码	
        ...
    }

    fun unBinding() {
        // 解绑 防止内存泄漏
        ...
    }

    interface IBaseListObserver<T, K : BaseViewHolder> {
        fun getRecyclerView(): RecyclerView?

        fun getSwipeRefreshLayout(): SwipeRefreshLayout?

        fun getEmptyView(): View?

        fun getAdapter(): BaseQuickAdapter<T, K>

        fun getLayoutManager(): RecyclerView.LayoutManager

        fun hasLoadMore(): Boolean = true

        fun goneLoadMoreView(): Boolean = false

        fun getPageSize(): Int = 20

        fun autoRefresh(): Boolean = true

        fun loadData(pageNo: Int, pageSize: Int): Observable<List<T>>
    }
        
}

BaseDialogActivity -> IDialogHelper

class IDialogHelper {

    fun attach(activity: Activity, observer: IDialogObserver) {
        // 初始化代码	
        ...
    }

    fun attach(dialog: Dialog, observer: IDialogObserver) {
        // 初始化代码	
        ...
    }

    interface IDialogObserver {

        fun getWidthRatio(): Float = 1f

        fun getHeightRatio(): Float = 0.65f
    }    
}

BaseVideoActivity -> IVideoPlayerHelper

class IVideoPlayerHelper : LifecycleEventObserver, DLNADeviceConnectListener {
    
    fun binding(fragment: Fragment, observer: IBaseListObserver<T, K>) {
        // 初始化代码	
        ...
    }

    fun binding(content: Activity, observer: IBaseListObserver<T, K>) {
        // 初始化代码	
        ...
    }

    fun unBinding() {
        // 解绑 防止内存泄漏
        ...
    }

   interface IVideoPlayerObserver {

        fun getVideoPlayerView(): AliyunVodPlayerView?
    
        // 屏幕旋转
        fun onScreenModeChanged(mode: AliyunScreenMode)
    
        fun isResumeAutoPlay(): Boolean = true
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值