它是我的代码。我做错了什么?我想在recyclerview中显示降序结果。
TableInfo.TABLE_COLUMN_MESSAGE = "points"
override fun onBindViewHolder(p0: MojViewHolder, p1: Int) {
val wynikwynik = p0.view.textViewWynik
val wynikuser = p0.view.textView_user
val cursor = db.query(TableInfo.TABLE_NAME, null, BaseColumns._ID + "=?", arrayOf(p0.adapterPosition.plus(1).toString()), null, null, TableInfo.TABLE_COLUMN_MESSAGE +" DESC")
if (cursor.moveToFirst()){
wynikwynik.text=cursor.getString(1).toString()
wynikuser.text=cursor.getString(2).toString()
}
cursor.close()
}
答案 0 :(得分:2)
首先,您应该分离业务逻辑的视图,我想说您不应该在recyclerView中执行数据库请求,最好的方法是在您的recyclerView中传递一组数据,这些数据就是信息对于您的recyclerView lList,如果您在ViewHolder中发出db请求,那么您将在List的每一行中发出请求,这是一个问题。
检查以下有关回收者视图工作的信息: https://developer.android.com/guide/topics/ui/layout/recyclerview
答案 1 :(得分:0)
该语句仅获取1行,因为据我了解,BaseColumns._ID
是表的主键。
因此,您将p0.adapterPosition.plus(1).toString()
作为该语句的参数传递,而query()
方法将获取具有此ID的行。
因此仅1行就没有排序!
如果要获取表中所有降序排列的行,则必须执行以下语句:
val cursor = db.query(TableInfo.TABLE_NAME, null, null, null, null, null, TableInfo.TABLE_COLUMN_MESSAGE + " DESC")
或者甚至更好地使用rawQuery()
:
val cursor = db.rawQuery("SELECT * FROM " + TableInfo.TABLE_NAME + " ORDER BY " + TableInfo.TABLE_COLUMN_MESSAGE + " DESC", null)
答案 2 :(得分:0)
硬编码排序顺序DESC
防止任何替代的(远程或数据库)排序...
至少,除非适配器项未实现Comparable<T>
(用于本地排序)。
查询数据库onBindViewHolder()
是错误的。