添加 setTextColor 后,OnItemClickListener 在 recyclerView 中无法正常工作?

阿里·阿尔梅斯巴

我有一个包含 recyclerview 的片段,该视图显示 cardviews 中的时间段,如下所示

在此处输入图片说明

我想要的是:如果用户单击卡片视图,单词可用更改为完整,文本颜色变为红色,如下所示,单击 7:30 插槽时

在此处输入图片说明

问题:在 onbindViewHolder 中将 setTextColor() 添加到 textview 后,更改(文本为“Full”,颜色为红色)适用于单击的卡片,但是当我滚动 recyclerview 时,我发现另一张卡片将文本颜色更改为红色而不更改在随机位置文本到“完整”!

在此处输入图片说明

我的适配器代码: class TimeSlotAdapter(private 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)
    }
}

活动片段代码: class 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))

}

}

请问这个问题怎么解决?

    if (currentItem.isSelected) {

    // the problem when I add the below
        holder.mAvailability.setTextColor(Color.RED)
    }

我还没有测试过这段代码,但根据我的经验,它应该是:

    if (currentItem.isSelected) {
        holder.mAvailability.setTextColor(Color.RED)
    } else {
        holder.mAvailability.setTextColor(Color.GREEN)
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

添加“删除”后,Gridster无法正常工作

来自分类Dev

添加标签栏后,温泉用户界面导航无法正常工作

来自分类Dev

向数组添加值后无法使函数正常工作

来自分类Dev

片段中的RecyclerView无法正常工作

来自分类Dev

布局编辑后,Android RecyclerView Scroll无法正常工作

来自分类Dev

添加数据后RecyclerView不更新

来自分类Dev

在RecyclerView中添加删除按钮

来自分类Dev

RecyclerView OnClick无法正常工作

来自分类Dev

在RecyclerView中滚动时,加载位图无法正常工作

来自分类Dev

RecyclerView:scrollToPosition无法正常工作

来自分类Dev

recyclerview中的webview无法正常工作

来自分类Dev

如何在Recyclerview中取消设置OnitemClickListener

来自分类Dev

添加标签后li float无法正常工作

来自分类Dev

微调器onitemclicklistener无法正常工作

来自分类Dev

我无法在jquery中添加类无法正常工作

来自分类Dev

在点击后在jQuery中添加复选框元素后无法正常工作

来自分类Dev

在导航抽屉中,onitemclicklistener无法正常工作。

来自分类Dev

向数组添加值后无法使函数正常工作

来自分类Dev

添加header.php文件后,Wordpress中的style.css无法正常工作

来自分类Dev

添加updatepanel后Clockpicker无法正常工作

来自分类Dev

页面中的分页后无法正常工作

来自分类Dev

Powershell添加无法正常工作

来自分类Dev

添加AngularJS后Bootstrap Scrollpy无法正常工作

来自分类Dev

在DrawerLayout中添加RecyclerView

来自分类Dev

通过ACM将HTTPS添加到我的EBS中后,HTTPS无法正常工作

来自分类Dev

在 Recyclerview 中添加空间

来自分类Dev

Laravel 与 find 一起工作正常,但在添加 paginate 后无法正常工作

来自分类Dev

在数据框中添加新因子以替换另一个因子后,字母顺序无法正常工作

来自分类Dev

在 Android 中设置 onItemClickListener 到 RecyclerView 项目

Related 相关文章

  1. 1

    添加“删除”后,Gridster无法正常工作

  2. 2

    添加标签栏后,温泉用户界面导航无法正常工作

  3. 3

    向数组添加值后无法使函数正常工作

  4. 4

    片段中的RecyclerView无法正常工作

  5. 5

    布局编辑后,Android RecyclerView Scroll无法正常工作

  6. 6

    添加数据后RecyclerView不更新

  7. 7

    在RecyclerView中添加删除按钮

  8. 8

    RecyclerView OnClick无法正常工作

  9. 9

    在RecyclerView中滚动时,加载位图无法正常工作

  10. 10

    RecyclerView:scrollToPosition无法正常工作

  11. 11

    recyclerview中的webview无法正常工作

  12. 12

    如何在Recyclerview中取消设置OnitemClickListener

  13. 13

    添加标签后li float无法正常工作

  14. 14

    微调器onitemclicklistener无法正常工作

  15. 15

    我无法在jquery中添加类无法正常工作

  16. 16

    在点击后在jQuery中添加复选框元素后无法正常工作

  17. 17

    在导航抽屉中,onitemclicklistener无法正常工作。

  18. 18

    向数组添加值后无法使函数正常工作

  19. 19

    添加header.php文件后,Wordpress中的style.css无法正常工作

  20. 20

    添加updatepanel后Clockpicker无法正常工作

  21. 21

    页面中的分页后无法正常工作

  22. 22

    Powershell添加无法正常工作

  23. 23

    添加AngularJS后Bootstrap Scrollpy无法正常工作

  24. 24

    在DrawerLayout中添加RecyclerView

  25. 25

    通过ACM将HTTPS添加到我的EBS中后,HTTPS无法正常工作

  26. 26

    在 Recyclerview 中添加空间

  27. 27

    Laravel 与 find 一起工作正常,但在添加 paginate 后无法正常工作

  28. 28

    在数据框中添加新因子以替换另一个因子后,字母顺序无法正常工作

  29. 29

    在 Android 中设置 onItemClickListener 到 RecyclerView 项目

热门标签

归档