gpt4 book ai didi

Android 在 Adapter kotlin 中选择和取消选择项目时出现问题?

转载 作者:行者123 更新时间:2023-12-02 04:33:31 25 4
gpt4 key购买 nike

我正在创建一个 View 以分组方式显示时间。为此,我将项目分组到 HashMap 中并将其传递给 Activity 。从我的 Activity 中,我正在初始化父适配器以以线性方式显示列表。在该父适配器中,还有另一个带有时间项目的子适配器,这些项目使用 gridLayout 管理器以网格方式显示。

当前场景和问题的图像如下: enter image description here

现在是实际问题,我一次只想选择 1 次。但是正如你所看到的,不同的arraylist在这里有不同的选择。当我从同一组中选择 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)

My child Timeslots adapter -> 在这个适配器中,我编写了一段代码来选择取消选择时间。但它只发生在同一组。

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()

}
}
}

最佳答案

尝试将一个适配器与网格管理器一起使用

GridLayoutManager gridLayoutManager = new GridLayoutManager(getAppContext(), 3); 
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
//define span size for this position
//for example, if you have 2 column per row, you can implement something like that:
if(position == youRule) {
return 3; // 3 item in row
} else {
return 1; // 1 item in row
}
}
});

您还应该将两个适配器合二为一。与项目的 hashmap 不同,使用排序列表项目 [标题、时间、时间、时间、标题、时间、时间、时间等]。现在您可以简单地检查哪些项目需要标记为选中。

关于Android 在 Adapter kotlin 中选择和取消选择项目时出现问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46217375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com