一、内容概要
在一个完整的项目中,有可能有非常多的列表页面,有些甚至动辄十几二十个,而列表的大部分内容都是相同的,如:布局相同、样板adapter相同、刷新控件相同等。此时如果我们一个个的写样板代码显得有点工作量重复。为了是代码看起来简洁以及后期便于维护我们可以定义一个公用的列表刷新模板来供子类使用,这样子类只需要集成这个公用的基类就可以非常快速的实现一个刷新列表,大大减少实际编码量。下面就来看看具体应该如何做。
二、实战部分
/**
* 自带刷新功能的基类,子类一旦继承了该类,则刷新功能自动形成
* create by yangwei
* on 2020/7/23 16:40
*/
abstract class BaseListRefreshActivity<P : BasePresenter<*, *>> : BaseMvpActivity<P>() {
/**
* 定义Adapter
*/
private var adapter: RecyclerView.Adapter<*>? = null
/**
* 设置刷新的基类布局
*/
override fun getLayoutId(): Int {
return R.layout.base_refresh_layout
}
/**
* 对页面数据进行初始化
*/
override fun initViews() {
getRecycleView().layoutManager = getLayoutManager()
getRefreshLayout().setOnRefreshLoadMoreListener(createRefreshListener())
adapter = createAdapter()
getRecycleView().adapter = adapter
}
/**
* 停止刷新
*/
fun stopRefresh() {
ptrl_list.finishLoadMore()
ptrl_list.finishRefresh()
}
/**
* 获取刷新布局
*/
fun getRefreshLayout(): SmartRefreshLayout {
return ptrl_list
}
/**
* 获取RecycleView
*/
fun getRecycleView(): RecyclerView {
return recycle_view
}
/**
* 获取Adapter
*/
fun getAdapter(): RecyclerView.Adapter<*>? {
return adapter
}
/**
* 创建刷新监听器
*/
abstract fun createRefreshListener(): OnRefreshLoadMoreListener
/**
* 获取布局管理器
*/
abstract fun getLayoutManager(): RecyclerView.LayoutManager
/**
* 在子类中延时创建Adapter
*/
abstract fun createAdapter(): RecyclerView.Adapter<*>
}
三、注意点
实现上非常的简单,首先定义一个抽象的BaseListRefreshActivity,然后创建抽象的adapter、抽象的监听器、抽象的LayoutManager,然后在initViews()中对这些方法进行初始化。在子类中只用实现这些抽象方法就能快速的实现一个自带上拉加载和下来刷新的RecycleView。
非常简单的实现方式,但是很实用,大家可以把它放入自己的base_sdk中,做外快项目或者做公司自己的项目都可以快速的使用。
四、结束
简单的实现就这样愉快的而结束了,赶快动手试试吧,看看是不是比重新开始写模板代码块很多