So aktualisieren Sie Daten in einem Recyclerview mit LiveStata und einem SearchView
Posted: 12 May 2025, 01:17
Ich habe eine Raum Datenbank (mit DAO), ein Repository , einen ViewModel a recyclerview und einen Adapter interagieren miteinander. Fügen Sie oben eine Suchleiste hinzu und filtern Sie die Ergebnisse in der Recyclerview .
Der Parameter .ReferenceItems im Refadapter enthält die Liste der Elemente, die ich anzeigen möchte.
ist vom Typ Mutablelist
Die Methode getFilteredReference () sieht im DAO :
so aus
Es gibt eine Live -ata .
Die SortreferenceItemList () besteht darin, eine bestimmte Elementgruppe Header hinzuzufügen. Dies ist nur für die Ästhetik. Aber , es dauert einen Mutablelist als Argument und nicht ein Lebendata .
Ich verstehe nicht, wie "es" ein Mutablelist sein kann, wenn alles, was ich übergehe, ein gelebter Aspekt ist . Ich versuche, den Wert von Searchval zu ändern, um die Live -ATA zu aktualisieren ... aber nichts passiert.
//SearchView
searchView = view.findViewById(R.id.search_ref)
searchView.setOnQueryTextListener(object : OnQueryTextListener,
SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
TODO("Not yet implemented")
}
@SuppressLint("NotifyDataSetChanged")
override fun onQueryTextChange(newText: String?): Boolean {
searchVal = if (newText != null) {
newText.toString()
} else{
""
}
refAdapter.notifyDataSetChanged()
return true
}
})
< /code>
P.S: Ich bin kein Entwickler. Ich habe diese App vor 3 Jahren entwickelt und seitdem nie Kotlin oder Android Studio berührt. Aber ich denke, dies ist ein schönes Update für meine kleine persönliche App, die ich gerne beenden würde.
Code: Select all
@SuppressLint("NotifyDataSetChanged")
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// Init la searchVal
searchVal = ""
// Set RecyclerView
setRecyclerView(view)
// Observe LiveData of all items
viewModel.getFilteredReferenceItem(searchVal).observe(viewLifecycleOwner, Observer {
refAdapter.referenceItems = viewModel.sortReferenceItemList(it)
refAdapter.notifyDataSetChanged()
})
Code: Select all
.referenceItems
Die Methode getFilteredReference () sieht im DAO :
so aus
Code: Select all
@Query(value="SELECT * FROM reference_items WHERE reference_item_name LIKE '%' || :searchVal || '%' ORDER BY category ASC, reference_item_name ASC")
fun getFilteredReferenceItem(searchVal : String): LiveData
Die SortreferenceItemList () besteht darin, eine bestimmte Elementgruppe Header hinzuzufügen. Dies ist nur für die Ästhetik. Aber , es dauert einen Mutablelist als Argument und nicht ein Lebendata .
Code: Select all
refAdapter.referenceItems = viewModel.sortReferenceItemList(it)
//SearchView
searchView = view.findViewById(R.id.search_ref)
searchView.setOnQueryTextListener(object : OnQueryTextListener,
SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
TODO("Not yet implemented")
}
@SuppressLint("NotifyDataSetChanged")
override fun onQueryTextChange(newText: String?): Boolean {
searchVal = if (newText != null) {
newText.toString()
} else{
""
}
refAdapter.notifyDataSetChanged()
return true
}
})
< /code>
P.S: Ich bin kein Entwickler. Ich habe diese App vor 3 Jahren entwickelt und seitdem nie Kotlin oder Android Studio berührt. Aber ich denke, dies ist ein schönes Update für meine kleine persönliche App, die ich gerne beenden würde.