RecyclerView.Adapter的方式
private fun initView ( ) {
val list = arrayListOf< String> ( )
repeat ( 9 ) {
list. add ( it. toString ( ) )
}
binding. rvList. adapter = MyAdapter ( list)
binding. rvList. layoutManager = LinearLayoutManager ( this , LinearLayoutManager. VERTICAL, false )
}
package maka. components. myheaderfooter
import android. view. LayoutInflater
import android. view. View
import android. view. ViewGroup
import android. widget. TextView
import android. widget. Toast
import androidx. recyclerview. widget. RecyclerView
private const val TYPE_HEADER = 0
private const val TYPE_NORMAL = 1
private const val TYPE_FOOTER = 2
class MyAdapter ( private val list: ArrayList< String> ) :
RecyclerView. Adapter< MyAdapter. MyViewHolder> ( ) {
var headerView: View? = null
var footerView: View? = null
override fun onCreateViewHolder ( parent: ViewGroup, viewType: Int) : MyViewHolder {
return when ( viewType) {
TYPE_HEADER -> {
headerView =
LayoutInflater. from ( parent. context)
. inflate ( R. layout. item_recycler_header, parent, false )
MyViewHolder ( headerView!! )
}
TYPE_FOOTER -> {
footerView =
LayoutInflater. from ( parent. context)
. inflate ( R. layout. item_recycler_footer, parent, false )
MyViewHolder ( footerView!! )
}
else -> {
val itemView =
LayoutInflater. from ( parent. context)
. inflate ( R. layout. item_recycler_item, parent, false )
MyViewHolder ( itemView)
}
}
}
override fun onBindViewHolder ( holder: MyViewHolder, position: Int) {
val realPosition = position - 1
holder. tvTest? . text = list[ realPosition]
}
override fun getItemCount ( ) : Int {
return list. size + 2
}
override fun getItemViewType ( position: Int) : Int {
if ( position == 0 ) return TYPE_HEADER
if ( position == itemCount - 1 ) return TYPE_FOOTER
return TYPE_NORMAL
}
inner class MyViewHolder ( itemView: View) : RecyclerView. ViewHolder ( itemView) {
var tvTest: TextView? = null
init {
when ( itemView) {
footerView -> {
footerView? . setOnClickListener {
Toast. makeText ( itemView. context, "footer" , Toast. LENGTH_SHORT) . show ( )
}
}
headerView -> {
headerView? . setOnClickListener {
Toast. makeText ( itemView. context, "header" , Toast. LENGTH_SHORT) . show ( )
}
}
else -> {
tvTest = itemView. findViewById ( R. id. tv_test)
tvTest? . setOnClickListener {
Toast. makeText (
itemView. context,
"" + ( layoutPosition - 1 ) ,
Toast. LENGTH_SHORT
)
. show ( )
}
}
}
}
}
}
BaseQuickAdapter的方式
implementation "com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4"
private fun initView ( ) {
val list = arrayListOf< String> ( )
repeat ( 9 ) {
list. add ( it. toString ( ) )
}
val adapter2 = MyAdapter2 ( R. layout. item_recycler_item)
adapter2. data = list
adapter2. addHeaderView ( layoutInflater. inflate ( R. layout. item_recycler_header, null ) )
adapter2. addFooterView ( layoutInflater. inflate ( R. layout. item_recycler_footer, null ) )
binding. rvList. adapter = adapter2
binding. rvList. layoutManager =
LinearLayoutManager ( this , LinearLayoutManager. VERTICAL, false )
}
package maka. components. myheaderfooter
import android. widget. TextView
import android. widget. Toast
import com. chad. library. adapter. base. BaseQuickAdapter
import com. chad. library. adapter. base. viewholder. BaseViewHolder
class MyAdapter2 ( layoutResId: Int) : BaseQuickAdapter< String, BaseViewHolder> ( layoutResId) {
init {
setOnItemClickListener { _, _, position ->
Toast. makeText ( context, "position=$position " , Toast. LENGTH_SHORT) . show ( )
}
}
override fun convert ( holder: BaseViewHolder, item: String) {
val tvTest = holder. getView< TextView> ( R. id. tv_test)
tvTest. text = item
}
}