如何实现点击showBottomDialogBtn弹出底部弹窗及RecyclerView单选功能
单选底部对话框实现方案
1. 点击按钮弹出底部对话框
直接用Android官方提供的BottomSheetDialog组件实现,代码示例如下:
showBottomDialogBtn.setOnClickListener { // 初始化底部对话框实例 val bottomSheetDialog = BottomSheetDialog(this@MainActivity) // 加载自定义对话框布局 val dialogView = layoutInflater.inflate(R.layout.dialog_bottom_select, null) bottomSheetDialog.setContentView(dialogView) // 此处插入下面RecyclerView的初始化逻辑 initRecyclerView(dialogView, bottomSheetDialog) bottomSheetDialog.show() }
2. 实现单选RecyclerView
第一步:定义数据结构
新增字段记录条目选中状态:
data class OptionItem( val content: String, var isSelected: Boolean = false )
第二步:实现单选适配器
内部维护选中位置,点击时自动切换选中状态:
class SingleSelectAdapter( private val dataList: List<OptionItem>, private val onSelect: (OptionItem) -> Unit ) : RecyclerView.Adapter<SingleSelectAdapter.VH>() { // 记录当前选中位置,默认-1代表无选中 private var currentSelectedPos = -1 inner class VH(itemView: View) : RecyclerView.ViewHolder(itemView) { val tvContent: TextView = itemView.findViewById(R.id.tv_content) val ivCheck: ImageView = itemView.findViewById(R.id.iv_check) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH { val view = LayoutInflater.from(parent.context) .inflate(R.layout.item_single_select, parent, false) return VH(view) } override fun onBindViewHolder(holder: VH, position: Int) { val item = dataList[position] holder.tvContent.text = item.content // 根据选中状态更新UI if (item.isSelected) { holder.ivCheck.visibility = View.VISIBLE holder.tvContent.setTextColor(Color.BLUE) } else { holder.ivCheck.visibility = View.GONE holder.tvContent.setTextColor(Color.BLACK) } // 点击切换选中状态 holder.itemView.setOnClickListener { if (currentSelectedPos != position) { // 重置上一个选中条目的状态 if (currentSelectedPos != -1) { dataList[currentSelectedPos].isSelected = false notifyItemChanged(currentSelectedPos) } // 更新当前选中条目状态 currentSelectedPos = position item.isSelected = true notifyItemChanged(position) // 触发选中回调 onSelect.invoke(item) } } } override fun getItemCount() = dataList.size }
第三步:绑定适配器到对话框的RecyclerView
private fun initRecyclerView(dialogView: View, dialog: BottomSheetDialog) { val rvSelect = dialogView.findViewById<RecyclerView>(R.id.rv_select) rvSelect.layoutManager = LinearLayoutManager(this) // 构造测试数据 val optionList = listOf( OptionItem("选项1"), OptionItem("选项2"), OptionItem("选项3"), OptionItem("选项4") ) val adapter = SingleSelectAdapter(optionList) { selectedItem -> // 选中后处理逻辑,比如弹提示、关闭对话框 Toast.makeText(this, "选中了${selectedItem.content}", Toast.LENGTH_SHORT).show() dialog.dismiss() } rvSelect.adapter = adapter }
效果参考

内容的提问来源于stack exchange,提问作者Noob
相关产品推荐
相关产品推荐

