class CqlbAdapter(_data: List<Cq_item>): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private val data = mutableListOf<Any>()
init {
data.addAll(_data)
}
override fun getItemCount() = data.size
override fun getItemViewType(position: Int): Int {
return when (data[position]) {
is Cq_item -> 0
is List<*> -> 1
else -> throw Exception()
}
}
@SuppressLint("NotifyDataSetChanged")
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if(holder is ItemViewHolder){
if (data[position] is Cq_item){
val d = data[position] as Cq_item
holder.setJob(d.job)
holder.setProject(d.project)
holder.setGR(d.gr)
holder.itemView.findViewById<ImageButton>(R.id.ib_more).setOnClickListener {
data.add(position+1,d.list)
notifyItemInserted(position+1)
//notifyItemChanged(position+1,"list_name")
notifyItemRangeChanged(position+1,data.size - (position + 1),"list_name")
}
}
}
}
override fun onBindViewHolder(
holder: RecyclerView.ViewHolder,
position: Int,
payloads: MutableList<Any>
) {
if (payloads.isEmpty())
onBindViewHolder(holder,position)
else
if (holder is NamesViewHolder){
if (data[position] is List<*>){
val d = data[position] as List<String>
holder.setNames(d)
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return when(viewType){
0 -> ItemViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.rvlist_cqlb_item, parent, false))
1 -> NamesViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.rvlist_cqlb_names, parent, false))
else -> throw Exception()
}
}
class ItemViewHolder(item: View): RecyclerView.ViewHolder(item){
fun setProject(name: String){
itemView.findViewById<TextView>(R.id.tv_project_name).text = name
}
fun setJob(name: String){
itemView.findViewById<TextView>(R.id.tv_job).text = name
}
fun setGR(name: Float){
itemView.findViewById<TextView>(R.id.tv_gr).text = "$name 天"
}
}
class NamesViewHolder(item: View): RecyclerView.ViewHolder(item){
fun setNames(list: List<String>){
itemView.findViewById<GridView>(R.id.gv_names).apply {
adapter = ArrayAdapter(itemView.context,android.R.layout.simple_list_item_1,list)
numColumns = 4
}
}
}
data class Cq_item(
var project: String,
var job: String,
var gr: Float,
val list: List<String>
)
}
val list = mutableListOf<CqlbAdapter.Cq_item>()
list.add(0, CqlbAdapter.Cq_item("888","999",6.5f,listOf("11","222","333")))
adapter = CqlbAdapter(list)
layoutManager = LinearLayoutManager(this@Xjcq,RecyclerView.VERTICAL,false)
debug显示,在第一次点击时payload传了Null值,要第二次点击才能正确传值,这是什么原因
相似问题