类型不匹配。所需上下文:已找到 MyAdapter.ViewHolder
Type mismatch. Required Context: Found MyAdapter.ViewHolder
我正在开发一个小型笔记应用程序,我在其中离线保存数据到“SQLite”中。
我有一个 class MyAdapter
用于在 RecycleView
中填充数据。我还有另一个 DatabaseHandler
class 用于创建 SQLite 数据库。
我遵循 MVVM
架构,这就是为什么我需要单独的 classes。我收到类型不匹配错误。有人可以帮我解决吗?
class MyAdapter(private val perdata: ArrayList<PersonData>):
RecyclerView.Adapter<MyAdapter.ViewHolder>() {
var dbHandler: DatabaseHandler? = null
var context:Context? = null
var pos: Int = 0
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyAdapter.ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.contact_ticket, parent, false)
return ViewHolder(view)
}
override fun getItemCount(): Int {
return perdata.size
}
override fun onBindViewHolder(holder: MyAdapter.ViewHolder, position: Int) {
holder.bind(perdata[position])
}
override fun getItemId(position: Int): Long {
pos = position
return super.getItemId(position)
}
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view){
/*
constructor():super(){ //Error Primary constructor call expected
}
*/
fun bind(data: PersonData){
itemView.et_surname.setText(data.firstname)
itemView.et_first_name.setText(data.surname)
itemView.et_company_name.setText(data.company_name)
itemView.et_des.setText(data.des)
itemView.btn_delete.setOnClickListener(View.OnClickListener {
dbHandler = DatabaseHandler(this) //Type mismatch error here on this
})
}
}
}
DatabaseHandler class 是这样声明的。
class DatabaseHandler(context: Context) : SQLiteOpenHelper(context, DB_NAME, null, DB_VERSIOM){}
那是因为这里将 this
传递给 DatabaseHandler
指的是 ViewHolder
class 而不是 context
。如果你想要 context
,你可以像下面这样从 itemView 中获取它:
itemView.btn_delete.setOnClickListener(View.OnClickListener {
dbHandler = DatabaseHandler(itemView.context)
})
我正在开发一个小型笔记应用程序,我在其中离线保存数据到“SQLite”中。
我有一个 class MyAdapter
用于在 RecycleView
中填充数据。我还有另一个 DatabaseHandler
class 用于创建 SQLite 数据库。
我遵循 MVVM
架构,这就是为什么我需要单独的 classes。我收到类型不匹配错误。有人可以帮我解决吗?
class MyAdapter(private val perdata: ArrayList<PersonData>):
RecyclerView.Adapter<MyAdapter.ViewHolder>() {
var dbHandler: DatabaseHandler? = null
var context:Context? = null
var pos: Int = 0
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyAdapter.ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.contact_ticket, parent, false)
return ViewHolder(view)
}
override fun getItemCount(): Int {
return perdata.size
}
override fun onBindViewHolder(holder: MyAdapter.ViewHolder, position: Int) {
holder.bind(perdata[position])
}
override fun getItemId(position: Int): Long {
pos = position
return super.getItemId(position)
}
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view){
/*
constructor():super(){ //Error Primary constructor call expected
}
*/
fun bind(data: PersonData){
itemView.et_surname.setText(data.firstname)
itemView.et_first_name.setText(data.surname)
itemView.et_company_name.setText(data.company_name)
itemView.et_des.setText(data.des)
itemView.btn_delete.setOnClickListener(View.OnClickListener {
dbHandler = DatabaseHandler(this) //Type mismatch error here on this
})
}
}
}
DatabaseHandler class 是这样声明的。
class DatabaseHandler(context: Context) : SQLiteOpenHelper(context, DB_NAME, null, DB_VERSIOM){}
那是因为这里将 this
传递给 DatabaseHandler
指的是 ViewHolder
class 而不是 context
。如果你想要 context
,你可以像下面这样从 itemView 中获取它:
itemView.btn_delete.setOnClickListener(View.OnClickListener {
dbHandler = DatabaseHandler(itemView.context)
})