For my app I use a recycler view list that displays Pizza Restaurants that include its name, location, and rating. In it I want to use a search view that can look up the restaurant by its name. Every time I try to run it I keep getting errors about my search view. I am trying to get my SearchView to work, but it keeps on getting errors every time I launch the app.
This is my RV.Adapter:
`
class PizzaAdapter(private var PizzaList: List<Pizza>):
RecyclerView.Adapter<PizzaAdapter.PizzaViewHolder>()
{
private lateinit var listener: PizzaAdapterListener
inner class PizzaViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val textViewName: TextView = itemView.findViewById(R.id.textViewName)
val textViewLocation: TextView = itemView.findViewById(R.id.textViewLocation)
val ratingBar: RatingBar = itemView.findViewById(R.id.ratingBar)
} // end MyViewHolder
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PizzaViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.activity_current_pizza_palor_list, parent, false)
return PizzaViewHolder(view)
}
override fun onBindViewHolder(holder: PizzaViewHolder, position: Int) {
val pizza = PizzaList[position]
holder.textViewName.text = pizza.name
holder.textViewLocation.text = pizza.location
holder.ratingBar.rating = pizza.rate!!?.toFloat()!!
}
override fun getItemCount(): Int {
return PizzaList.size
}
fun setData(list: List<Pizza>) {
PizzaList = list
notifyDataSetChanged()
}
interface PizzaAdapterListener {
fun onClick(position: Int)
}
fun getFilter(): Filter {
return object : Filter() {
override fun performFiltering(constraint: CharSequence?): FilterResults {
val filteredList = mutableListOf<Pizza>()
if (constraint == null || constraint.isEmpty()) {
filteredList.addAll(PizzaList)
} else {
val filterPattern = constraint.toString().toLowerCase().trim()
for (item in PizzaList) {
if (item.name.toLowerCase().contains(filterPattern)) {
filteredList.add(item)
}
}
}
val results = FilterResults()
results.values = filteredList
return results
}
override fun publishResults(constraint: CharSequence?, results: FilterResults?) {
PizzaList = results?.values as List<Pizza>
notifyDataSetChanged()
}
fun setOnItemClickListener(_listener: PizzaAdapterListener) {
listener = _listener
}
}
}
}
`
This is my MainActivity which I am trying to use SearchView:
`
class MainActivity : AppCompatActivity() {
private lateinit var recyclerViewPizza: RecyclerView
private lateinit var data : ArrayList<Pizza>
private lateinit var pizzaAdapter : PizzaAdapter
private lateinit var searchView : SearchView
@SuppressLint("MissingInflatedId")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
recyclerViewPizza = findViewById<RecyclerView>(R.id.recyclerViewPizza)
recyclerViewPizza.layoutManager = LinearLayoutManager(this)
data = ArrayList<Pizza>()
data.add(Pizza("Pizza Hut", "Deer Park", 3.1))
data.add(Pizza("Papa Johns", "Deer Park", 3.9))
data.add(Pizza("Richie's Pizza", "Commack", 4.4))
data.add(Pizza("Domino's Pizza", "Deer Park", 4.2))
val searchView = findViewById<SearchView>(R.id.searchView)
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
return false
}
override fun onQueryTextChange(newText: String?): Boolean {
filter(newText)
return true
}
})
}
private fun filter(query: String?) {
val filteredList = mutableListOf<Pizza>()
if (query.isNullOrEmpty()) {
filteredList.addAll(data)
} else {
val filterPattern = query.trim()
for (item in data) {
if (item.name.contains(filterPattern, true)) {
filteredList.add(item)
}
}
}
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
val inflater = menuInflater
inflater.inflate(R.menu.toolmenu, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.getItemId()) {
R.id.add_item->{
val intent = Intent(this@MainActivity, AddActivity::class.java)
startActivity(intent)
true
}
else -> super.onOptionsItemSelected(item)
}
}
}
`
I have tried using documentation and finding tutorials online to help but none of them have worked for my case. So far my app refuses to even open now and I have also tried going back and fourth again to check my code.