今天在研究别人的项目的时候,就看到这个框架出现的频率挺高的,于是决定还是有必要继续深挖下,实现头部+内容+底部的拼接,用的还是官方里面的代码:(源码的话,请去官方下载哈)
github地址:https://github.com/CymChad/BaseRecyclerViewAdapterHelper
官方简书地址:https://www.jianshu.com/p/b343fcff51b0
其实用法也很简单:
就是把内容部分作为主体:
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,其中的一种用法就是这样了,接下来继续研究其他用法
网友评论