1:完成才艺展示功能

This commit is contained in:
2025-11-28 14:38:03 +08:00
parent b089f4a56f
commit 784a67214d
10 changed files with 387 additions and 14 deletions

View File

@@ -0,0 +1,106 @@
package com.xscm.modulemain.adapter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.compose.ui.graphics.Color
import androidx.recyclerview.widget.RecyclerView
import com.xscm.modulemain.R
/**
* 项目名称:羽声语音
* 时间2025/11/28 10:39
* 用途:房间人才列表适配器,支持单选功能
*/
class RoomTalentAdapter(
private val dataList: List<String>,
private val onItemSelectedListener: (String, Int) -> Unit
) : RecyclerView.Adapter<RoomTalentAdapter.ViewHolder>() {
private var selectedPosition = -1 // 默认没有选中项
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_room_talent, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val item = dataList[position]
holder.bind(item, position)
}
override fun getItemCount(): Int = dataList.size
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
private val textView: TextView = itemView.findViewById(R.id.tv_talent)
fun bind(item: String, position: Int) {
textView.text = item
// 设置选中状态
if (position == selectedPosition) {
textView.setBackgroundResource(R.drawable.bg_item_selected) // 选中背景
textView.setTextColor(android.graphics.Color.parseColor("#3ABC6D"))
} else {
textView.setBackgroundResource(R.drawable.bg_item_normal) // 默认背景
textView.setTextColor(android.graphics.Color.parseColor("#333333"))
}
// 设置点击事件
itemView.setOnClickListener {
// 如果点击的是已选中的项,不做处理
if (position == selectedPosition) return@setOnClickListener
// 更新选中位置
val previousPosition = selectedPosition
selectedPosition = position
// 通知之前选中的项更新背景
if (previousPosition != -1) {
notifyItemChanged(previousPosition)
}
// 通知当前选中的项更新背景
notifyItemChanged(position)
// 回调选中的值和位置
onItemSelectedListener(item, position)
}
}
}
/**
* 设置选中的位置
*/
fun setSelectedPosition(position: Int) {
if (position in 0 until itemCount && position != selectedPosition) {
val previousPosition = selectedPosition
selectedPosition = position
if (previousPosition != -1) {
notifyItemChanged(previousPosition)
}
notifyItemChanged(position)
}
}
/**
* 获取当前选中的位置
*/
fun getSelectedPosition(): Int = selectedPosition
/**
* 获取当前选中的值
*/
fun getSelectedValue(): String? {
return if (selectedPosition in 0 until itemCount) {
dataList[selectedPosition]
} else {
null
}
}
}