Kotlin 未解析引用:切换到视图绑定后的myViewHolder
在从删除kotlin_扩展切换到视图绑定后,我在我的onBindViewHolder方法中收到一个“未解析引用:myViewHolder”,当我将“myViewHolder”替换为“holder”时,它会给我一个“未解析引用:bind”。我如何解决这个问题 MyAdapterKotlin 未解析引用:切换到视图绑定后的myViewHolder,kotlin,android-recyclerview,android-viewbinding,Kotlin,Android Recyclerview,Android Viewbinding,在从删除kotlin_扩展切换到视图绑定后,我在我的onBindViewHolder方法中收到一个“未解析引用:myViewHolder”,当我将“myViewHolder”替换为“holder”时,它会给我一个“未解析引用:bind”。我如何解决这个问题 MyAdapter class MyAdapter(private val context: Context, private val mHelper : TaskDbHelper) : RecyclerView.Adapter<MyA
class MyAdapter(private val context: Context, private val mHelper : TaskDbHelper) : RecyclerView.Adapter<MyAdapter.MyViewHolder>(),
SwipeAndDragHelper.ActionCompletionContract {
class MyViewHolder(val binding: CellCardsBinding): RecyclerView.ViewHolder(binding.root ) {
fun binding() {
}
}
private var touchHelper: ItemTouchHelper? = null
private var list = mutableListOf<MyObject>()
override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {
initList()
super.onAttachedToRecyclerView(recyclerView)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
return MyViewHolder(CellCardsBinding.inflate(LayoutInflater.from(parent.context), parent, false))
}
@RequiresApi(Build.VERSION_CODES.P)
@SuppressLint("ClickableViewAccessibility")
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val myObject = list[position]
myViewHolder.bind(myObject)
val activity: Activity = context as Activity
holder.binding.text.setOnClickListener{
activity.launchActivity<AddNoteActivity>(42) {
putExtra("PositionInList", position.toString())
putExtra("TaskTitle", myObject.title)
putExtra("TaskText", myObject.text)
}
}
activity.findViewById<RecyclerView>(R.id.recyclerView).setOnTouchListener { _, event ->
when (event.actionMasked) {
MotionEvent.ACTION_UP -> {
updateNotesPositionInDb()
false
}
else -> {
false
}
}
}
holder.binding.title.setOnTouchListener { _, event ->
when (event.actionMasked) {
MotionEvent.ACTION_DOWN -> {
touchHelper!!.startDrag(holder)
false
}
else -> {
false
}
}
}
}
private fun initList() {
list.clear()
val db = mHelper.readableDatabase
val cursor = db.query(
TaskContract.TaskEntry.TABLE,
arrayOf(
TaskContract.TaskEntry.ID,
TaskContract.TaskEntry.COL_TASK_TITLE,
TaskContract.TaskEntry.COL_TASK_TEXT,
TaskContract.TaskEntry.COL_TASK_DATE),null, null, null, null, TaskContract.TaskEntry.ID)
while (cursor.moveToNext()) {
val id = cursor.getColumnIndex(TaskContract.TaskEntry.ID)
val idTitle = cursor.getColumnIndex(TaskContract.TaskEntry.COL_TASK_TITLE)
val idText = cursor.getColumnIndex(TaskContract.TaskEntry.COL_TASK_TEXT)
val idDate = cursor.getColumnIndex(TaskContract.TaskEntry.COL_TASK_DATE)
list.add(MyObject(cursor.getString(id), cursor.getString(idTitle), cursor.getString(idText), cursor.getString(idDate)))
}
notifyDataSetChanged()
cursor.close()
db.close()
}
override fun getItemCount(): Int {
return list.size
}
override fun onViewMoved(oldPosition: Int, newPosition: Int) {
val target = list[oldPosition]
list.removeAt(oldPosition)
list.add(newPosition, target)
notifyItemMoved(oldPosition, newPosition)
}
override fun onViewSwiped(position: Int) {
deleteTask(list[position].ID)
list.removeAt(position)
notifyItemRemoved(position)
updateNotesPositionInDb()
}
fun setTouchHelper(touchHelper: ItemTouchHelper) {
this.touchHelper = touchHelper
}
fun addTask(taskTitle : String, taskText: String) {
val values = ContentValues()
val sdf = SimpleDateFormat("dd/MM/yyyy/", Locale.US)
val date = sdf.format(Date())
values.put(TaskContract.TaskEntry.ID, list.size)
values.put(TaskContract.TaskEntry.COL_TASK_TITLE, taskTitle)
values.put(TaskContract.TaskEntry.COL_TASK_TEXT, taskText)
values.put(TaskContract.TaskEntry.COL_TASK_DATE, date)
val db = mHelper.readableDatabase
db.insertWithOnConflict(TaskContract.TaskEntry.TABLE,
null,
values,
SQLiteDatabase.CONFLICT_REPLACE)
db.close()
list.add(MyObject(list.size.toString(), taskTitle, taskText, date))
notifyItemInserted(list.size)
}
fun addTask() {
val test: Activity = context as Activity
test.launchActivity<AddNoteActivity>(42) {
/* putExtra("user", "854")
p utExtra("user2", "46850") */
}
}
private fun deleteTask(taskId: String) {
val db = mHelper.readableDatabase
db.delete(TaskContract.TaskEntry.TABLE,
"id=$taskId", null)
db.close()
}
fun modifyTask(taskPosition: String, taskTitle: String, taskText: String) {
val target = list[taskPosition.toInt()]
target.title = taskTitle
target.text = taskText
val values = ContentValues()
val sdf = SimpleDateFormat("dd/MM/yyyy/", Locale.US)
val date = sdf.format(Date())
values.put(TaskContract.TaskEntry.ID, taskPosition)
values.put(TaskContract.TaskEntry.COL_TASK_TITLE, taskTitle)
values.put(TaskContract.TaskEntry.COL_TASK_TEXT, taskText)
values.put(TaskContract.TaskEntry.COL_TASK_DATE, date)
val db = mHelper.readableDatabase
db.update(TaskContract.TaskEntry.TABLE,
values, TaskContract.TaskEntry.ID + "=" + target.ID, null)
db.close()
notifyItemChanged(taskPosition.toInt())
}
private fun updateNotesPositionInDb() {
val db = mHelper.readableDatabase
var i = 0
while (i < list.size) {
val values = ContentValues()
values.put(TaskContract.TaskEntry.ID, i)
db.update(TaskContract.TaskEntry.TABLE,
values, TaskContract.TaskEntry.ID + "=? AND " + TaskContract.TaskEntry.COL_TASK_TITLE + "=?", arrayOf(list[i].ID, list[i].title))
i++
}
db.close()
}
类MyAdapter(private-val-context:context,private-val-mHelper:TaskDbHelper):RecyclerView.Adapter(),
SwipeAndRagHelper.ActionCompletionContract{
类MyViewHolder(val绑定:CellCardsBinding):RecyclerView.ViewHolder(binding.root){
趣味绑定(){
}
}
私有变量touchHelper:ItemTouchHelper?=null
private var list=mutableListOf()
覆盖附加的ToRecyclerView(recyclerView:recyclerView){
initList()
super.onAttachedToRecyclerView(recyclerView)
}
重写CreateViewHolder(父级:ViewGroup,viewType:Int):MyViewHolder{
返回MyViewHolder(CellCardsBinding.充气(LayoutFlater.from(parent.context),parent,false))
}
@RequiresApi(Build.VERSION\u CODES.P)
@SuppressLint(“ClickableViewAccessibility”)
覆盖onBindViewHolder(holder:MyViewHolder,位置:Int){
val myObject=列表[位置]
myViewHolder.bind(myObject)
val活动:活动=作为活动的上下文
holder.binding.text.setOnClickListener{
活动启动活动(42){
putExtra(“PositionInList”,position.toString())
putExtra(“任务标题”,myObject.title)
putExtra(“任务文本”,myObject.text)
}
}
activity.findViewById(R.id.recyclerView).setOnTouchListener{},事件->
何时(event.actionMasked){
MotionEvent.ACTION\u UP->{
UpdateNotesPositionDB()
假的
}
其他->{
假的
}
}
}
holder.binding.title.setOnTouchListener{{},事件->
何时(event.actionMasked){
MotionEvent.ACTION\u向下->{
touchHelper!!.startDrag(支架)
假的
}
其他->{
假的
}
}
}
}
私人娱乐列表(){
list.clear()
val db=mHelper.readableDatabase
val cursor=db.query(
TaskContract.TaskEntry.TABLE,
排列(
TaskContract.TaskEntry.ID,
TaskContract.TaskEntry.COL_任务标题,
TaskContract.TaskEntry.COL_任务_文本,
TaskContract.TaskEntry.COL_TASK_DATE),null,null,null,null,TaskContract.TaskEntry.ID)
while(cursor.moveToNext()){
val id=cursor.getColumnIndex(TaskContract.TaskEntry.id)
val idTitle=cursor.getColumnIndex(TaskContract.TaskEntry.COL_TASK_TITLE)
val idText=cursor.getColumnIndex(TaskContract.TaskEntry.COL_TASK_TEXT)
val idDate=cursor.getColumnIndex(TaskContract.TaskEntry.COL_TASK_DATE)
添加(MyObject(cursor.getString(id)、cursor.getString(idTitle)、cursor.getString(idText)、cursor.getString(idDate)))
}
notifyDataSetChanged()
cursor.close()
db.close()
}
重写getItemCount():Int{
返回列表。大小
}
覆盖视图移动(旧位置:Int,新位置:Int){
val目标=列表[旧位置]
列表.删除(旧位置)
列表。添加(新位置、目标)
notifyItemMoved(旧位置、新位置)
}
覆盖视图滑动的乐趣(位置:Int){
deleteTask(列表[位置].ID)
列表。移除(位置)
已删除的项目(位置)
UpdateNotesPositionDB()
}
趣味setTouchHelper(touchHelper:ItemTouchHelper){
this.touchHelper=touchHelper
}
乐趣添加任务(任务标题:字符串,任务文本:字符串){
val values=ContentValues()
val sdf=SimpleDateFormat(“dd/MM/yyyy/”,Locale.US)
val date=sdf.format(date())
value.put(TaskContract.TaskEntry.ID,list.size)
value.put(TaskContract.TaskEntry.COL_TASK_TITLE,taskTitle)
value.put(TaskContract.TaskEntry.COL_TASK_TEXT,taskText)
value.put(TaskContract.TaskEntry.COL_TASK_日期,日期)
val db=mHelper.readableDatabase
db.insertWithOnConflict(TaskContract.TaskEntry.TABLE,
无效的
价值观
SQLiteDatabase.CONFLICT\u REPLACE)
db.close()
添加(MyObject(list.size.toString(),taskTitle,taskText,date))
notifyItemInserted(list.size)
}
有趣的任务(){
val测试:活动=作为活动的上下文
测试启动活动(42){
/*putExtra(“用户”、“854”)
p utExtra(“用户2”、“46850”)*/
}
}
私有任务(任务ID:字符串){
val db=mHelper.readableDatabase
db.delete(TaskContract.TaskEntry.TABLE、,
“id=$taskId”,空)
db.close()
}
趣味modifyTask(taskPosition:String,taskTitle:String,taskText:String){
val target=list[taskPosition.toInt()]
target.title=任务标题
target.text=taskText
val values=ContentValues()
val sdf=SimpleDateFormat(“dd/MM/yyyy/”,Locale.US)
val date=sdf.format(date())
value.put(TaskContract.TaskEntry.ID,taskPosition)
value.put(TaskContract.TaskEntry.COL_TASK_TITLE,taskTitle)
value.put(TaskContract.TaskEntry.COL_TASK_TEXT,taskText)
value.put(TaskContract.TaskEntry.COL_TASK_日期,日期)
val db=mHelper.readableDatabase
数据库更新(TaskContract.TaskEntry.TABLE,
值,TaskContract.TaskEntry.ID+“=”+target.ID,null)
db.close()
notifyItemChanged(taskPosition.toInt())
}
私人娱乐UpdateNotesPositionDB(){
val db=mHelper.readableDatabase
变量i=0
而(i
我试过阅读Android Studio的官方文档,但它不能
// --------------------this-----v
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val myObject = list[position]
// v--- doesn't match this
myViewHolder.bind(myObject)
class MyViewHolder(val binding: CellCardsBinding): RecyclerView.ViewHolder(binding.root ) {
fun binding() {
}
}
You should pass an instance of the data class
class MyViewHolder(val binding: CellCardsBinding): RecyclerView.ViewHolder(binding.root ) {
fun bind(object: MyObject) {
// Set variables on binding
}
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val myObject = list[position]
holder.bind(myObject)
class MyAdapter(private val context: Context, private val mHelper : TaskDbHelper) : RecyclerView.Adapter<MyAdapter.MyViewHolder>(),
SwipeAndDragHelper.ActionCompletionContract {
class MyViewHolder(val binding: CellCardsBinding): RecyclerView.ViewHolder(binding.root ) {
private val titleView: TextView = itemView.findViewById<View>(R.id.title) as TextView
val textView: TextView = itemView.findViewById<View>(R.id.text) as TextView
private val dateTextView: TextView = itemView.findViewById<View>(R.id.date) as TextView
fun binding (myObject: MyObject) {
titleView.text = myObject.title
textView.text = myObject.text
dateTextView.text = myObject.date
}
}