android - ListView 显示排序的数据而不是它在数据库中的存储方式

标签 android android-sqlite android-arrayadapter simplecursoradapter

我正在根据下面在实现 CursorLoader 的 Fragment 中显示的代码从 数据库 填充我的 ListView em> 早些时候我使用 SimpleCursorAdapter 来达到同样的目的,但由于某些原因我不得不改用 ArrayAdapter

数据库只有两列:

_id(integer primary key autoincrement) and message(string not null)

ListView 工作正常,但问题是 ListView 中显示的字符串自动按字母顺序排序,而不是按存储顺序排序。而我在使用 SimpleCursorAdapter 时没有遇到这个问题。

谁能告诉我这次做错了什么以及如何改正。

@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
    String[] projection = {KEY_ROWID, KEY_MESSAGE};
    CursorLoader cursorLoader = new CursorLoader(getActivity(),
            CONTENT_URI, projection, null, null, null);
    return cursorLoader;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {

    if(cursor != null){
        msgList = new ArrayList<String>();
        cursor.moveToFirst();
        while(cursor.isAfterLast() == false){
            msgList.add(cursor.getString(1).toString());
            cursor.moveToNext();
        }
    } 

    mAdapter = new ArrayAdapter<String>(getActivity(), R.layout.msg_list, R.id.list_textView, msgList);
    listview.setAdapter(mAdapter);
}

@Override
public void onLoaderReset(Loader<Cursor> arg0) {
    if (mAdapter != null)
        listview.setAdapter(null);
}

谢谢

最佳答案

数据库中的数据总是以不可预知的顺序获取。
您必须指定要对数据进行排序的列和每列的顺序方向(默认值:ASC)。

尝试使用 CursorLoader(..., KEY_ROWID + "DESC")

关于android - ListView 显示排序的数据而不是它在数据库中的存储方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25613035/

相关文章:

android - 错误 :(33, 0) 找不到参数的方法类路径 () [com.google.gms :google-services:3. 0.1]

android - 无法在 android SQLite DB 中插入多行

android - 所选项目未在微调器 kotlin 中显示

android - 使用 SSL 证书为 iOS 9 开发时管理开发环境

java - 以编程方式刷新 ARP 表

android - 在 Android DatePickerDialog 中选择多个日期

android - 在 Android 中关闭游标/数据库

java - 准备语句 Sqlite Android 的跟踪行

java - 无法从 Fragment 获取上下文

android - 在 ListView 中修改文本大小时更新项目高度