1. 空布局adpter代码
class EmptyViewAdapter<T : RecyclerView.Adapter<V>, V : RecyclerView.ViewHolder>(private val adapter: T) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
init {
// 为了支持adapter.notifyDataSetChanged方法,需注册业务adapter监听
adapter.registerAdapterDataObserver(object : AdapterDataObserver() {
override fun onChanged() {
notifyDataSetChanged()
}
})
}
// 空布局的ViewType
private val EMPTY_VIEW = 0xff
override fun getItemCount(): Int {
// 判断数据是否空,若是没有数据,而且须要显示空布局,就返回1
return if (adapter.itemCount != 0) {
adapter.itemCount
} else {
1
}
}
override fun getItemViewType(position: Int): Int {
return if (adapter.itemCount != 0) {
adapter.getItemViewType(position)
} else {
EMPTY_VIEW
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (getItemViewType(position) == EMPTY_VIEW) {
// do nothing
} else {
adapter.onBindViewHolder(holder as V, position)
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return if (viewType == EMPTY_VIEW) {
// 建立空布局item
ViewHolder(parent)
} else {
adapter.onCreateViewHolder(parent, viewType)
}
}
class ViewHolder(
parent: ViewGroup,
val viewBinding: AdapterEmptyViewBinding = AdapterEmptyViewBinding.inflate(
LayoutInflater.from(parent.context), parent, false
)
) : RecyclerView.ViewHolder(viewBinding.root) {
init {
}
}
}
2. 空布局xml代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/app_icon_image_bg"
android:src="@mipmap/icon_empty" />
</LinearLayout>
3. 具体方式
只需将自定义adpter作为参数传入EmptyAdapter中,使用方式就是这么简单
binding.apkDownloadingRecycle.apply {
layoutManager = LinearLayoutManager(context)
adapter = EmptyViewAdapter(appAdapter)
}
4. 最终展示效果
如图所示,当数据为空时显示空布局,不为空时正常显示。
5. 结尾
谢谢观看,欢迎大家批评指正。