【发布时间】: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