У меня есть фрагмент, который содержит обзор переработчика, который показывает временные интервалы в просмотрах карт, как показано ниже
Что я хочу: , если пользователь щелкает по просмотру карты, слово Доступно меняется на Полный, а цвет текста становится красным, как показано ниже при нажатии на 7:30 слот
Проблема: после добавления setTextColor () к просмотру текста в onbindViewHolder,
изменения (текст на «Полный», цвет на красный) относятся к карте, на которую щелкнули, но когда я прокручиваю обзор переработчика, я вижу, что другая карта меняет цвет текста на красный без изменения текста на «Полный» в случайной позиции !!
Код моего адаптера:
Класс TimeSlotAdapter (закрытый val timeSlotsList: ArrayList): RecyclerView.Adapter () {
private var mListener: OnItemClickListener? = null
interface OnItemClickListener {
fun onItemClick(position: Int)
}
fun setOnItemClickListener (listener: OnItemClickListener) {
mListener = listener
}
class TimeSlotViewHolder(card: View, listener: OnItemClickListener?): RecyclerView.ViewHolder(card){
var mCardTime: TextView = card.findViewById(R.id.timeTV)
var mAvailability: TextView = card.findViewById(R.id.availabilityTV)
init {
card.setOnClickListener {
if (listener != null) {
val position = adapterPosition
if (position != RecyclerView.NO_POSITION) {
listener.onItemClick(position)
}
}
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TimeSlotViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.time_slot, parent, false)
return TimeSlotViewHolder(v, mListener)
}
override fun getItemCount(): Int = timeSlotsList.size
override fun onBindViewHolder(holder: TimeSlotViewHolder, position: Int) {
val currentItem = timeSlotsList[position]
holder.mCardTime.text = currentItem.cardTime
holder.mAvailability.text = currentItem.availability
if (currentItem.isSelected) {
// the problem when I add the below
holder.mAvailability.setTextColor(Color.RED)
}
}
код фрагмента деятельности:
Класс ReserveTimeFragment: Fragment () {
private var timeSlotsList: ArrayList<TimeSlot>? = null
private var mRecyclerView: RecyclerView? = null
private var mAdapter: TimeSlotAdapter? = null
private var mLayoutManager: RecyclerView.LayoutManager? = null
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_reserve_time, container, false)
mRecyclerView = view.findViewById(R.id.recyclerViewLO)
createTimeSlotsList()
buildRecyclerView()
return view
}
fun buildRecyclerView() {
mRecyclerView!!.setHasFixedSize(true)
mLayoutManager = LinearLayoutManager(activity)
mAdapter = TimeSlotAdapter(timeSlotsList!!)
mRecyclerView!!.layoutManager = mLayoutManager
mRecyclerView!!.adapter = mAdapter
mAdapter!!.setOnItemClickListener(object : TimeSlotAdapter.OnItemClickListener {
override fun onItemClick(position: Int) {
selectedItem(position, "Full", false)
}
})
}
fun selectedItem(position: Int, text: String, selected: Boolean) {
timeSlotsList!![position].changeAvailability(text)
timeSlotsList!![position].selecteditem(selected)
mAdapter!!.notifyDataSetChanged()
}
private fun createTimeSlotsList() {
timeSlotsList = ArrayList()
timeSlotsList!!.add(TimeSlot("07:30", "Available", false))
timeSlotsList!!.add(TimeSlot("08:00", "Available", false))
timeSlotsList!!.add(TimeSlot("08:30", "Available", false))
timeSlotsList!!.add(TimeSlot("09:00", "Available", false))
timeSlotsList!!.add(TimeSlot("09:30", "Available", false))
timeSlotsList!!.add(TimeSlot("10:00", "Available", false))
timeSlotsList!!.add(TimeSlot("10:30", "Available", false))
timeSlotsList!!.add(TimeSlot("11:00", "Available", false))
timeSlotsList!!.add(TimeSlot("11:30", "Available", false))
timeSlotsList!!.add(TimeSlot("12:00", "Available", false))
timeSlotsList!!.add(TimeSlot("12:30", "Available", false))
timeSlotsList!!.add(TimeSlot("13:00", "Available", false))
timeSlotsList!!.add(TimeSlot("13:30", "Available", false))
timeSlotsList!!.add(TimeSlot("14:00", "Available", false))
timeSlotsList!!.add(TimeSlot("14:30", "Available", false))
timeSlotsList!!.add(TimeSlot("15:00", "Available", false))
timeSlotsList!!.add(TimeSlot("15:30", "Available", false))
timeSlotsList!!.add(TimeSlot("16:00", "Available", false))
timeSlotsList!!.add(TimeSlot("16:30", "Available", false))
timeSlotsList!!.add(TimeSlot("17:00", "Available", false))
timeSlotsList!!.add(TimeSlot("17:30", "Available", false))
timeSlotsList!!.add(TimeSlot("18:00", "Available", false))
timeSlotsList!!.add(TimeSlot("18:30", "Available", false))
timeSlotsList!!.add(TimeSlot("19:00", "Available", false))
timeSlotsList!!.add(TimeSlot("19:30", "Available", false))
timeSlotsList!!.add(TimeSlot("20:00", "Available", false))
timeSlotsList!!.add(TimeSlot("20:30", "Available", false))
timeSlotsList!!.add(TimeSlot("21:00", "Available", false))
timeSlotsList!!.add(TimeSlot("21:30", "Available", false))
timeSlotsList!!.add(TimeSlot("22:00", "Available", false))
}
}
Как решить эту проблему, пожалуйста?