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

Forum für diejenigen, die für Android programmieren
Anonymous
 So aktualisieren Sie Daten in einem Recyclerview mit LiveStata und einem SearchView

Post 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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post