RecyclerView空布局实现

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. 最终展示效果

捕获.PNG

捕获2.PNG

如图所示,当数据为空时显示空布局,不为空时正常显示。

5. 结尾

谢谢观看,欢迎大家批评指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值