我从游标中设置ListView
,抓取数据库中的前10行(LIMIT)。
cursor = db.query("MYTABLE",
new String[]{"_id", "NUMBER", "NAME"}, null, null, null, null, null, "10");
列表设置为"无限滚动"。它通过比较滚动完成后列表中的项目数和数据库中的项目数(onScroll
来自OnScrollListener
)来实现此目的
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if(firstVisibleItem+visibleItemCount == totalItemCount && totalItemCount!=0)
{
ListView listView = (ListView) findViewById(R.id.my_list);
long numberOfItemsInDB = DatabaseUtils.queryNumEntries(db, "MYTABLE");
long numberOfItemsInList = listView.getAdapter().getCount();
long difference = numberOfItemsInDB - numberOfItemsInList;
if (difference > 0) {
... //do stuff here
}
这很有效。但有时列表可能会填充自定义光标中的项目(例如来自搜索过滤),因此我需要该光标的项目计数。我可以使用.getCount()
来获得一致的计数,但如果我已经使用了LIMIT,那么它将只返回我所拥有的LIMIT。
如何获取光标中忽略限制的项目数?
答案 0 :(得分:0)
使用以下方法获取表格中的行数。
public synchronized long getRowCount(String TABLE_NAME) {
SQLiteDatabase db = this.getReadableDatabase();
return DatabaseUtils.queryNumEntries(db, TABLE_NAME);
}
使用where
子句
public synchronized long getRowCount(String TABLE_NAME) {
SQLiteDatabase db = this.getReadableDatabase();
return DatabaseUtils.queryNumEntries(db, TABLE_NAME, "NAME like ?", new String[]{"%D%"})
}