【问题标题】:Listview showing sorted data instead of how it is stored in databaseListview 显示已排序的数据,而不是它在数据库中的存储方式
【发布时间】:2014-09-01 21:20:43
【问题描述】:

我正在根据下面显示在实现 CursorLoader 的 Fragment 中的代码从 Database 填充我的 ListView em> 之前我出于相同目的使用 SimpleCursorAdapter,但由于某些原因我不得不更改为 ArrayAdapter

数据库只有两列:

_id(整数主键自增)和消息(字符串不为空)

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);
}

谢谢

【问题讨论】:

  • CursorLoader(...., String sortOrder)
  • 数据库中的数据总是以不可预知的顺序获取。您必须指定要对数据进行排序的列以及每列的顺序方向(默认值:ASC)。
  • @FrankN.Stein 我使用 CursorLoader(..., KEY_ROWID + "DSC") 但它在没有这样的列 _idDSC 时抛出错误。
  • @FrankN.Stein 谢谢。像魅力一样工作。
  • 我从我的 cmets 中做了一个答案,以便您可以接受它并将问题从未回答的问题存储桶中提取出来。

标签: android android-sqlite android-arrayadapter simplecursoradapter


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多