Page 1 of 1

So aktualisieren Sie Daten in einem Recyclerview mit LiveStata und einem SearchView

Posted: 12 May 2025, 01:17
by Anonymous
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 .

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()
})
Der Parameter .ReferenceItems im Refadapter enthält die Liste der Elemente, die ich anzeigen möchte.

Code: Select all

.referenceItems
ist vom Typ Mutablelist
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
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 .

Code: Select all

refAdapter.referenceItems = viewModel.sortReferenceItemList(it)
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.