1.MyAdapter
class MyAdapter<T:Any>(private val context: Context, private val data: MutableList<T>,private val views: MutableList<out View> = mutableListOf()) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
//定义viewholder
class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val name: TextView = itemView.findViewById(R.id.name)
val hobby: TextView = itemView.findViewById(R.id.hobby)
}
class MyViewHolder1(itemView: View) : RecyclerView.ViewHolder(itemView) {
val name: TextView = itemView.findViewById(R.id.name)
}
class MyViewHolder2(itemView: View) : RecyclerView.ViewHolder(itemView) {
val name: TextView = itemView.findViewById(R.id.name)
val hobby: TextView = itemView.findViewById(R.id.hobby)
}
//创建viewholder
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return when (viewType) {
10 -> MyViewHolder(
LayoutInflater.from(context)
.inflate(R.layout.rv_item, parent, false)
)
11 -> MyViewHolder1(
LayoutInflater.from(context)
.inflate(R.layout.rv_item1, parent, false)
)
12 -> MyViewHolder2(
LayoutInflater.from(context)
.inflate(R.layout.rv_item2, parent, false)
)
else -> MyViewHolder(
LayoutInflater.from(context)
.inflate(R.layout.rv_item, parent, false)
)
}
}
//可以用data(position)
override fun getItemViewType(position: Int): Int {
return when (position % 3) {
0 -> 10
1 -> 11
2 -> 12
else -> 10
}
}
override fun getItemCount(): Int {
return data.size
}
//绑定viewholder
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (holder) {
is MyViewHolder -> {
holder.name.text = data[position].toString()
holder.hobby.text = "666"
holder.itemView.setOnClickListener {
Toast.makeText(
context,
"itemview点击$position",
Toast.LENGTH_SHORT
).show()
(views[0] as TextView).text = "不用回调也可以的"
}
holder.name.setOnClickListener {
Toast.makeText(
context,
"name点击$position",
Toast.LENGTH_SHORT
).show()
}
holder.hobby.setOnClickListener {
data.remove(data[position])
notifyDataSetChanged()
}
}
is MyViewHolder1 -> {
holder.name.text = data[position].toString()
holder.itemView.setOnClickListener {
Toast.makeText(
context,
"itemview点击$position",
Toast.LENGTH_SHORT
).show()
}
}
is MyViewHolder2 -> {
holder.name.text = data[position].toString()
holder.hobby.text = "666"
holder.itemView.setOnClickListener {
Toast.makeText(
context,
"itemview点击$position",
Toast.LENGTH_SHORT
).show()
}
holder.name.setOnClickListener {
Toast.makeText(
context,
"name点击$position",
Toast.LENGTH_SHORT
).show()
}
}
}
}
}
2.MainActivity
class MainActivity : AppCompatActivity() {
//adapter中数据变化-->传入数据变化
private val datalist =
mutableListOf<String>("666", "888", "xiyanyan", "666", "888", "xiyanyan")
private val madapter: MyAdapter by lazy {
MyAdapter(this, datalist, mutableListOf(title_tv))
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
custom_title.setTittle("nihao")
custom_title.setLeftOnClickListener {
Toast.makeText(this,"datalist.size=${datalist.size}",Toast.LENGTH_SHORT).show()
}
//span列
//recycler.layoutManager = GridLayoutManager(this,2)
recycler.layoutManager = LinearLayoutManager(this)
recycler.adapter = madapter
button.setOnClickListener {
datalist.remove("xiyanyan")
madapter.notifyDataSetChanged()
}
}
}
3.备注
android:overScrollMode="never"
委托模式:by lazy(单例)持有引用,委托给引用