我正在创建一个视图以分组方式显示时间。为此,我将项目分组到哈希图中并将其传递给活动。从我的活动中,我正在初始化父适配器以以线性方式显示列表。在该父适配器中,还有另一个子适配器,其中包含使用 gridLayout 管理器以网格方式显示的时间项。
The Image of the current scenario and the issue is as below:
现在的实际问题是,我一次只想选择 1 次。但正如你所看到的,不同的数组列表在这里有不同的选择。当我从同一组中选择 1 个项目时,它工作正常。但这并不是取消选择其他组的时间。我怎样才能做到这一点?
父适配器:
class TimePickerAdapter(context: Context, arrTimeSlots: ArrayList<ListItem>) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
val mContext = context
val mList = arrTimeSlots
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder {
return if (viewType == ListItem.TYPE_HEADER) {
TimeHeaderHolder(LayoutInflater.from(parent?.context).
inflate(R.layout.item_time_group, parent, false))
} else {
TimeSlotsHolder(LayoutInflater.from(parent?.context).
inflate(R.layout.item_time_child, parent, false))
}
}
override fun getItemCount() = mList.size
override fun getItemViewType(position: Int): Int {
return mList[position].type
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder?, position: Int) {
if (holder is TimeHeaderHolder) {
holder.itemView?.apply {
with(mList[position] as TimeHeaderItem) {
tvTimeGroupHeader.text = date
}
}
} else {
holder?.itemView?.apply {
with(mList[position] as TimeSlotItem) {
val mAdapter = TimeSlotsAdapter(mContext, pojoOfTimeSlots)
rvTimeSlotsChild.layoutManager = GridLayoutManager(mContext, 3)
rvTimeSlotsChild.adapter = mAdapter
}
}
}
}
inner class TimeHeaderHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
inner class TimeSlotsHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
}
我的子时间段适配器 -> 在此适配器中,我编写了一段代码来选择取消选择时间。但这种情况只发生在同一组人身上。
class TimeSlotsAdapter(context: Context, arrTimeSlots: List<TimeSlots>?) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
val mContext = context
val mList = arrTimeSlots!!
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder {
return TimePickerHolder(LayoutInflater.from(parent?.context).
inflate(R.layout.item_time_picker, parent, false))
}
override fun getItemCount() = mList.size
override fun onBindViewHolder(holder: RecyclerView.ViewHolder?, position: Int) {
holder?.itemView?.apply {
with(mList[position]) {
tvTimeView.text = convertedTime
if (isSelected) {
tvTimeView.background = ContextCompat.getDrawable(context,
R.drawable.time_rounded_corner_selected)
tvTimeView.setTextColor(ContextCompat.getColor(context, R.color.white))
} else {
tvTimeView.background = ContextCompat.getDrawable(context,
R.drawable.time_rounded_corner)
tvTimeView.setTextColor(ContextCompat.getColor(context, R.color.grey_text_7))
}
}
}
}
inner class TimePickerHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
init {
itemView.setOnClickListener {
for (i in mList.indices) {
mList[i].isSelected = false
}
mList[adapterPosition].isSelected = true
notifyDataSetChanged()
}
}
}
}