Kotlin,recyclerview适配器如何按DESC对查询结果进行排序

时间:2018-11-30 17:01:07

标签: android kotlin android-recyclerview

它是我的代码。我做错了什么?我想在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()

}

3 个答案:

答案 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()是错误的。