gpt4 book ai didi

android - 在 Recyclerview 中错误地运行 onBindViewHolder - Kotlin

转载 作者:行者123 更新时间:2023-11-30 04:54:01 25 4
gpt4 key购买 nike

我正在尝试处理我的 recyclerview,但出现了问题当我向下滚动时(onBindView 函数)工作正常但是当滚动回 recyclerview 中的第一个项目时,一切都变得错误,如下图所示。

   package com.leaderspro.mrlawyer.adapters

import android.graphics.Paint
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.leaderspro.mrlawyer.R
import com.leaderspro.mrlawyer.models.TODOModel
import kotlinx.android.synthetic.main.todo_list.view.*


class TODOAdapter(private val mArray: ArrayList<TODOModel>) :
RecyclerView.Adapter<TODOAdapter.ViewHolder>() {

var mView: View? = null

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
mView = LayoutInflater.from(parent.context).inflate(R.layout.todo_list, parent, false)

return ViewHolder(mView!!)
}

override fun getItemCount(): Int {
return mArray.size
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {


val mTODO = mArray[position]



if (mTODO.isDone == 0) {//not complete
holder.ivIsDone.setImageResource(R.drawable.ic_checkbox_unchecked)
} else if (mTODO.isDone == 1) {
holder.ivIsDone.setImageResource(R.drawable.ic_checkbox_checked)
holder.tvTodoTask.paintFlags =
holder.tvTodoTask.paintFlags or Paint.STRIKE_THRU_TEXT_FLAG //put line on done Tasks
}

holder.tvTodoTask.text = mTODO.task
holder.tvTODODate.text = mTODO.date

}


class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

val tvTodoTask = itemView.tvTodoTask!!
val tvTODODate = itemView.tvTODODate!!
val ivIsDone = itemView.ivIsDone!!

val todoListMainLinear = itemView.todoListMainLinear!!

}
}

工作正常 /image/6mBUJ.png

工作正常 /image/qcpLK.png

回滚时错误地调用了onBindView /image/2sRsu.png

最佳答案

使用 holder.adapterposition 代替 position

val mTODO = mArray[holder.adapterposition]

更多信息请查看:https://developer.android.com/reference/androidx/recyclerview/widget/RecyclerView.Adapter.html?hl=en#onBindViewHolder(VH,%20int)

编辑:正如@Pawel 指出的那样,当 mTodo.isDone == 0 时应清除标志。

应该可以完成工作

关于android - 在 Recyclerview 中错误地运行 onBindViewHolder - Kotlin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59519303/

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