Android Studio 的房间问题

Problems with Room on Android Studio

所以,我想在 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)
}

好吧,produtoDao.getAllSortedByName() 不会对项目进行适当的排序,它 returns 是一个已排序项目的列表。因此,当您执行 produto?.let { produtoDao.getAllSortedByName()} 时,您不会对排序列表的结果执行任何操作。

在下一行你调用 adapter.atualiza(produtoDao.buscaTodos()) 并且正如你在评论中提到的 produtoDao.buscaTodos() returns 一个未排序的产品列表。这就是您填充适配器的内容。

为了用排序后的列表填充适配器,您应该调用 adapter.atualiza(produtoDao.getAllSortedByName())