我正在根据下面在实现 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/