Несоответствие типов. Обязательный контекст: Найдено MyAdapter.ViewHolder - PullRequest
0 голосов
/ 12 апреля 2020

Я работаю над небольшим приложением для заметок, где я в автономном режиме сохраняю данные в `SQLite '.

У меня есть класс MyAdapter, который используется для заполнения данных в RecycleView. У меня есть другой класс DatabaseHandler, который используется для создания базы данных SQLite.

Я следую MVVM архитектуре, поэтому мне нужны отдельные классы. Я получаю ошибку несоответствия типов. Кто-нибудь может помочь мне решить это?

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 DatabaseHandler(context: Context) : SQLiteOpenHelper(context, DB_NAME, null, DB_VERSIOM){}

1 Ответ

1 голос
/ 12 апреля 2020

Это потому, что передача this в DatabaseHandler относится здесь к ViewHolder классу, а не context. Если вы хотите context, вы можете получить его из itemView следующим образом:

  itemView.btn_delete.setOnClickListener(View.OnClickListener {

                dbHandler = DatabaseHandler(itemView.context)

           })    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...