美文网首页
BRVAH第三方框架(二)

BRVAH第三方框架(二)

作者: jeffrey12138 | 来源:发表于2020-11-18 10:51 被阅读0次

    今天在研究别人的项目的时候,就看到这个框架出现的频率挺高的,于是决定还是有必要继续深挖下,实现头部+内容+底部的拼接,用的还是官方里面的代码:(源码的话,请去官方下载哈)
    github地址:https://github.com/CymChad/BaseRecyclerViewAdapterHelper
    官方简书地址:https://www.jianshu.com/p/b343fcff51b0

    截屏2020-11-17 下午2.48.11.png
    其实用法也很简单:
    就是把内容部分作为主体:
     private var adapter: HeaderAndFooterAdapter? = null
    

    然后调用第三方库里面的addHeaderView()和addFooterView()方法就好了!!!
    代码注释附上:

    import android.os.Bundle
    import android.view.View
    import android.widget.ImageView
    import androidx.recyclerview.widget.LinearLayoutManager
    import androidx.recyclerview.widget.RecyclerView
    import com.chad.baserecyclerviewadapterhelper.R
    import com.chad.baserecyclerviewadapterhelper.adapter.HeaderAndFooterAdapter
    import com.chad.baserecyclerviewadapterhelper.base.BaseActivity
    import com.chad.baserecyclerviewadapterhelper.utils.Tips
    
    /**
     * https://github.com/CymChad/BaseRecyclerViewAdapterHelper
     */
    class HeaderAndFooterUseActivity : BaseActivity() {
        private lateinit var mRecyclerView: RecyclerView
        private var adapter: HeaderAndFooterAdapter? = null
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_universal_recycler)
            //控制后退按钮显示,并设置点击返回事件 BaseActivity()实现
            setBackBtn()
            //设置标题,这个方法是在 BaseActivity()实现addHeaderView
            setTitle("HeaderAndFooter Use")
            mRecyclerView = findViewById(R.id.rv)
            mRecyclerView.layoutManager = LinearLayoutManager(this)
            initAdapter()
            val headerView = getHeaderView(0, View.OnClickListener {
                adapter!!.addHeaderView(getHeaderView(1, removeHeaderListener), 0)
            })
            adapter!!.addHeaderView(headerView)
            val footerView = getFooterView(0, View.OnClickListener {
                adapter!!.addFooterView(getFooterView(1, removeFooterListener), 0) })
            adapter!!.addFooterView(footerView, 0)
            mRecyclerView.adapter = adapter
        }
    
        private fun getHeaderView(type: Int, listener: View.OnClickListener): View {
            val view = layoutInflater.inflate(R.layout.head_view, mRecyclerView, false)
            if (type == 1) {
                val imageView = view.findViewById<ImageView>(R.id.iv)
                imageView.setImageResource(R.mipmap.rm_icon)
            }
            view.setOnClickListener(listener)
            return view
        }
    
        private fun getFooterView(type: Int, listener: View.OnClickListener): View {
            val view = layoutInflater.inflate(R.layout.footer_view, mRecyclerView, false)
            if (type == 1) {
                val imageView = view.findViewById<ImageView>(R.id.iv)
                imageView.setImageResource(R.mipmap.rm_icon)
            }
            view.setOnClickListener(listener)
            return view
        }
    
        private val removeHeaderListener: View.OnClickListener
            get() = View.OnClickListener { v -> adapter!!.removeHeaderView(v) }
    
        private val removeFooterListener: View.OnClickListener
            get() = View.OnClickListener { v -> adapter!!.removeFooterView(v) }
    
        private fun initAdapter() {
            adapter = HeaderAndFooterAdapter(PAGE_SIZE)
            adapter!!.animationEnable = true
            adapter!!.setOnItemClickListener { _, _, position -> Tips.show(position.toString()) }
        }
    
        companion object {
            private const val PAGE_SIZE = 3
        }
    }
    

    然后网络加载失败的显示方式也很简单,所以就不另外写一个文章了,只是调用了setEmptyView()方法就可以了,然后转圈圈的View是调用里面的FloatingActionButton这个自定义控件哦

    private fun onRefresh() {
            // 方式一:直接传入 layout id
            mAdapter.setEmptyView(R.layout.loading_view)
            mRecyclerView.postDelayed({
                if (mError) {
                    // 方式二:传入View
                    mAdapter.setEmptyView(errorView)
                    mError = false
                } else {
                    if (mNoData) {
                        mAdapter.setEmptyView(emptyDataView)
                        mNoData = false
                    } else {
                        mAdapter.setList(DataServer.getSampleData(10))
                    }
                }
            }, 1000)
        }
    

    emmm,其中的一种用法就是这样了,接下来继续研究其他用法

    相关文章

      网友评论

          本文标题:BRVAH第三方框架(二)

          本文链接:https://www.haomeiwen.com/subject/kpnxiktx.html