Не работает SearchView

При попытки прописать действие на searchView вылетает приложение. Как обьект без действий отображается нормально и приложение запускается, но поиск соответственно не работает. В коде выделю строчки при которых вылетает Не смог соблюсти форматирование форума, в коде xml, mineactivity и adapter

'''FATAL EXCEPTION: main Process: com.example.rvdbidnamephonedate, PID: 15354 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.rvdbidnamephonedate/com.example.rvdbidnamephonedate.ListNotification}: kotlin.UninitializedPropertyAccessException: lateinit property searchView has not been initialized at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread'''

XML

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context=".MainActivity">

 <com.google.android.material.card.MaterialCardView
     android:id="@+id/materialCardView"
     android:layout_width="0dp"
     android:layout_height="wrap_content"
     android:layout_marginStart="5dp"
     android:layout_marginTop="5dp"
     android:layout_marginEnd="5dp"
     app:cardCornerRadius="8dp"
     app:cardElevation="12dp"
     app:cardUseCompatPadding="true"
     app:layout_constraintBottom_toTopOf="@+id/recyclerView"
     app:layout_constraintEnd_toEndOf="parent"
     app:layout_constraintHorizontal_bias="0.5"
     app:layout_constraintStart_toStartOf="parent"
     app:layout_constraintTop_toTopOf="parent">

     <androidx.appcompat.widget.SearchView
         android:id="@+id/searchView"
         android:layout_width="match_parent"
         android:layout_height="50dp"
         app:iconifiedByDefault="false"
         app:queryBackground="@android:color/transparent"
         app:queryHint="Search here ..." />

 </com.google.android.material.card.MaterialCardView>

 <com.google.android.material.floatingactionbutton.FloatingActionButton
     android:id="@+id/floatingActionButton"
     android:layout_width="50dp"
     android:layout_height="50dp"
     android:layout_marginBottom="16dp"
     android:layout_marginEnd="16dp"
     android:clickable="true"
     app:layout_constraintBottom_toBottomOf="parent"
     app:layout_constraintEnd_toEndOf="parent"
     app:srcCompat="@android:drawable/ic_input_add"
     android:contentDescription="TODO" />


 <androidx.recyclerview.widget.RecyclerView
     android:id="@+id/recyclerView"
     android:layout_width="0dp"
     android:layout_height="0dp"
     app:layout_constraintBottom_toBottomOf="parent"
     app:layout_constraintEnd_toEndOf="parent"
     app:layout_constraintHorizontal_bias="0.0"
     app:layout_constraintStart_toStartOf="parent"
     app:layout_constraintTop_toBottomOf="@+id/materialCardView"
     app:layout_constraintVertical_bias="1.0" />

</androidx.constraintlayout.widget.ConstraintLayout>

Mineactivity


import android.content.Intent
import android.database.Cursor
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.widget.SearchView
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.floatingactionbutton.FloatingActionButton
import java.util.Locale

class ListNotification : AppCompatActivity() {

    lateinit var dbh: DBHelper
    private var newArry = ArrayList<Datalist>()
    private lateinit var recyclerView: RecyclerView
    private lateinit var btnadd: FloatingActionButton
    private lateinit var adapter: MyAdapter
    private lateinit var searchView: SearchView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_list_notification)

        recyclerView = findViewById(R.id.recyclerView)
        btnadd = findViewById(R.id.floatingActionButton)

        btnadd.setOnClickListener{
            intent = Intent(this, MainActivity::class.java)
            startActivity(intent)
        }
        dbh = DBHelper(this)
        recyclerView.layoutManager = LinearLayoutManager(this)
        recyclerView.setHasFixedSize(true)
        displayuser()

        searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener{
            override fun onQueryTextSubmit(query: String?): Boolean {
                return false
            }

            override fun onQueryTextChange(newText: String?): Boolean {
                filterList(newText)
                return true
            }

        })

    }

    private fun filterList(query: String?) {

        if (query != null) {
            val filteredList = ArrayList<Datalist>()
            for (i in newArry) {
                if (i.phone.lowercase(Locale.ROOT).contains(query)) {
                    filteredList.add(i)
                }
            }

            if (filteredList.isEmpty()) {
                Toast.makeText(this, "No Data found", Toast.LENGTH_SHORT).show()
            } else {
                adapter.setFilteredList(filteredList)
            }
        }
    }


    private  fun displayuser(){
        var newcursor: Cursor? = dbh!!.gettext()
        newArry = ArrayList<Datalist>()
        while (newcursor!!.moveToNext()){
            val utvID = newcursor.getString(0)
            val uname = newcursor.getString(1)
            val uphone = newcursor.getString(2)
            val utvDate = newcursor.getString(3)
            newArry.add(Datalist(utvID, uname, uphone, utvDate))
        }

        adapter = MyAdapter(newArry)
        recyclerView.adapter = adapter

        adapter.onItemClickListener(object : MyAdapter.onItemClickListener{
            override fun onOtemClick(position: Int) {
                intent = Intent(this@ListNotification, editrecycler::class.java)
                intent.putExtra("tvID", newArry[position].tvID)
                intent.putExtra("name", newArry[position].name)
                intent.putExtra("phone", newArry[position].phone)
                intent.putExtra("tvDate", newArry[position].tvDate)
                startActivity(intent)
            }

        })
    }
}

Adapter


import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.lifecycle.findViewTreeViewModelStoreOwner
import androidx.recyclerview.widget.RecyclerView
import org.w3c.dom.Text

class MyAdapter(var userList: List<Datalist>): RecyclerView.Adapter<MyAdapter.MyViewHolder>() {

   class MyViewHolder(itemView: View, listener: onItemClickListener): RecyclerView.ViewHolder(itemView){
       val ttvID: TextView = itemView.findViewById(R.id.tvIDtolist)
       val tname: TextView = itemView.findViewById(R.id.nameinlist)
       val tphone: TextView = itemView.findViewById(R.id.phoneinlist)
       val ttvDate: TextView = itemView.findViewById(R.id.tvDatetolist)

       init {
           itemView.setOnClickListener {
               listener.onOtemClick(adapterPosition)
           }
       }
   }

   fun setFilteredList(mList: List<Datalist>){
       this.userList = mList
       notifyDataSetChanged()
   }

   override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
       val itemView = LayoutInflater.from(parent.context).inflate(R.layout.list_user, parent,false)
       return  MyViewHolder(itemView, mListener)
   }

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

   override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
       val currentItem = userList[position]
       holder.ttvID.text = currentItem.tvID.toString()
       holder.tname.text = currentItem.name
       holder.tphone.text = currentItem.phone
       holder.ttvDate.text = currentItem.tvDate

   }

   private lateinit var mListener: onItemClickListener

   interface onItemClickListener{
       fun onOtemClick(position: Int)
   }

   fun onItemClickListener(listener: onItemClickListener){
       mListener = listener
   }

} 

Ответы (0 шт):