Не работает 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
}
}