1.建立adapter
class RecyclerViewAddHeaderAndFooterAdapter(var context: Context, var items: ArrayList):RecyclerView.Adapter<RecyclerViewAddHeaderAndFooterAdapter.ViewHolder>(){
companion object{
val TYPE_FOOTER = 1//添加Footer
val TYPE_HEADER = 2//添加Header
val TYPE_NORMAL = 0//兩者都沒有添加
var headerView: View? = null
var footerView: View? = null
}
var list = ArrayList()
init {
list = items
}
fun setHeaderView(hv: View){
headerView = hv
notifyItemInserted(0)
}
fun setFooterView(fv: View){
footerView = fv
notifyItemInserted(itemCount - 1)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
if (getItemViewType(position) == TYPE_HEADER) return
else if (getItemViewType(position) == TYPE_FOOTER) return
else{
if (holder is RecyclerViewAddHeaderAndFooterAdapter.ViewHolder){
Log.e("hjd", "position->"+ position)
val positionTemp = if (headerView == null) position else position -1
if (positionTemp < items.size){
holder.tv!!.text = items[positionTemp]
holder.itemView.tag= positionTemp
}
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
if (headerView != null && viewType == TYPE_HEADER)
return ViewHolder(headerView!!)
if (footerView != null && viewType == TYPE_FOOTER)
return ViewHolder(footerView!!)
val view = LayoutInflater.from(context).inflate(R.layout.item_recycler, parent, false)
view.setOnClickListener { listener?.onItemClick(view, view.tag as Int) }
return ViewHolder(view)
}
override fun getItemCount(): Int{
if (headerView != null && footerView != null)
return items.size + 2
else if(headerView == null && footerView == null)
return items.size
else
return items.size + 1
}
override fun getItemViewType(position: Int): Int {
if (headerView == null && footerView == null)
return TYPE_NORMAL
if(position == 0)
return TYPE_HEADER
if(position == itemCount-1)
return TYPE_FOOTER
return TYPE_NORMAL
}
class ViewHolder(itemTv: View):RecyclerView.ViewHolder(itemTv){
var tv: TextView? = null
init {
if (headerView != itemTv && footerView != itemTv) {
tv = itemTv.findViewById(R.id.item_tv) as TextView
}
}
}
private var listener: OnItemClickListener?=null
fun setOnItemClickListener(l: OnItemClickListener): Unit{
this.listener = l
}
interface OnItemClickListener{
fun onItemClick(view: View, pos: Int)
}
fun addItem(pos: Int){
list.add(pos, "Add item"+ pos)
notifyItemInserted(pos)
}
fun delItem(pos: Int){
list.removeAt(pos)
notifyItemRemoved(pos)
}
}
2. 設定header和footer
/**
* 添加HeaderView
*/
fun setHeaderView(rv: RecyclerView, adapter: RecyclerViewAddHeaderAndFooterAdapter){
val hv = LayoutInflater.from(this).inflate(R.layout.item_header, rv, false)
adapter.setHeaderView(hv)
}
/**
* 添加FooterView
*/
fun setFooterView(rv: RecyclerView, adapter: RecyclerViewAddHeaderAndFooterAdapter){
val hv = LayoutInflater.from(this).inflate(R.layout.item_footer, rv, false)
adapter.setFooterView(hv)
}
3.activity調用
var arrayList = ArrayList<String>()
arrayList.add("22222")
arrayList.add("3334q2q")
arrayList.add("34fssea")
var recyclerAdapter = RecyclerViewAddHeaderAndFooterAdapter(context,arrayList)
recyclerAdapter!!.setOnItemClickListener(object : RecyclerViewAddHeaderAndFooterAdapter.OnItemClickListener{
override fun onItemClick(view: View, position: Int) {
Toast.makeText(context," text is ${arrayList[position]}",Toast.LENGTH_SHORT).show()
}
})
val itemDecoration = DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
// itemDecoration.setDrawable(resources.getDrawable(R.drawable.divider_line))
activity_recyclerview.addItemDecoration(itemDecoration)
activity_recyclerview.itemAnimator=DefaultItemAnimator()
var linearLayoutManager = LinearLayoutManager(this)
linearLayoutManager.orientation=LinearLayoutManager.VERTICAL
activity_recyclerview.layoutManager = linearLayoutManager
activity_recyclerview.adapter = recyclerAdapter
setHeaderView(activity_recyclerview,recyclerAdapter)
setFooterView(activity_recyclerview,recyclerAdapter)