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