所以,我想在 Android Studio 上創建一個按鈕,以按排序順序、升序等更新我的串列,但我一直遇到代碼問題,我可以繞開它。當我單擊按鈕時沒有任何反應,它根本不會對我的串列進行排序
使用來自 Andriod Studio 的 Room Database FrameWork。
這是我用來進行排序的:
//'Produto' is the list, 'nome' is a element on that list that i want to sort
@Entity
@Parcelize
data class Produto(
@PrimaryKey(autoGenerate = true)
val id: Long,
val nome: String)
@Query("SELECT * FROM Produto")
fun buscaTodos() : List<Produto>
//This is the code that i use to do the sorting
@Query("SELECT * FROM Produto ORDER BY nome ASC")
fun getAllSortedByName(): List<Produto>
這是按下按鈕后我用來進行排序的代碼
class ListaProdutosAdapter(
private val context: Context,
produtos: List<Produto> = emptyList(),
var quandoClicaNoItem: (produto: Produto) -> Unit = {}
) : RecyclerView.Adapter<ListaProdutosAdapter.ViewHolder>() {
override fun onOptionsItemSelected(item: MenuItem): Boolean {
private val adapter = ListaProdutosAdapter(context = this)
val db = AppDatabase.instancia(this)
val produtoDao = db.produtoDao()
//menu_ordem_asc_id being the button id
when (item.itemId) {
R.id.menu_ordem_asc_id -> {
produto?.let { produtoDao.getAllSortedByName()}
adapter.atualiza(produtoDao.buscaTodos())
//This is in another class, but i put it here so it's easier to understand
fun atualiza(produtos: List<Produto>) {
this.produtos.clear()
this.produtos.addAll(produtos)
notifyDataSetChanged()
}
}
return super.onOptionsItemSelected(item)
}
uj5u.com熱心網友回復:
好吧,produtoDao.getAllSortedByName()不會對專案進行適當的排序,它會回傳已排序專案的串列。因此,當您這樣 做時,produto?.let { produtoDao.getAllSortedByName()}您不會對排序串列的結果做任何事情。
在您呼叫的下一行adapter.atualiza(produtoDao.buscaTodos()),正如您在評論中提到的那樣,produtoDao.buscaTodos()回傳一個未排序的產品串列。這就是您填充配接器的內容。
為了使用排序串列填充配接器,您應該呼叫它adapter.atualiza(produtoDao.getAllSortedByName())。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/441082.html
