我正在尝试使用Cursor和Loader从SQliteDatabase填充ListView,但所有项目都显示为完全无序
我的CursorAdapter类
@Override
public void bindView(View view, Context context, Cursor c) {
ItemHolder holder = null;
try{
holder = (ItemHolder) view.getTag();
} catch (Exception e){
e.printStackTrace();
}
if(holder != null){
System.out.println("b "+holder.position);
}
}
@Override
public View newView(Context context, Cursor c, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View nView = inflater.inflate(layoutID, parent, false);
ItemHolder holder = new ItemHolder();
System.out.println("a "+c.getPosition());
holder.position = c.getPosition();
nView.setTag(holder);
return nView;
}
单个完整滚动返回后的Logcat输出(a是newView()中的位置,b是bindView()中的位置
a 0
b 0
a 1
b 1
a 2
b 2
b 0
而不是
a 0
b 0
a 1
b 1
a 2
b 2
a 3
b 3
检查适配器中的光标是否返回正确的数据
c.moveToFirst();
for(int i = 0; i < c.getCount(); i++){
System.out.println(i+" "+c.getString(c.getColumnIndex(COL_NAME)));
c.moveToNext();
}
我使用最新的anroid.support.v4库
答案 0 :(得分:1)
您需要在SQL语句中添加ORDER BY
子句,以对查询结果进行排序。查看the documentation或this example了解详情。
样品:
SELECT * FROM <table> ORDER BY <column>;
p.s。:如果您使用database.query(...)
,可以在此处为排序列添加参数(请参阅orderBy
):
query(String table, String[] columns, String selection,
String[] selectionArgs, String groupBy, String having, String orderBy)