Android FilterQueryProvider、filter和ListView
我的数据库如下:Android FilterQueryProvider、filter和ListView,android,Android,我的数据库如下: ------------------------------ BOOK NAME | BOOK FORMAT | COUNT | ------------------------------ Android | HTML | 1 WPF | PDF | 10 Symbian | PS | 2 Windows | HTML | 2 adapter.getFilter().filter("1"); r
------------------------------
BOOK NAME | BOOK FORMAT | COUNT |
------------------------------
Android | HTML | 1
WPF | PDF | 10
Symbian | PS | 2
Windows | HTML | 2
adapter.getFilter().filter("1");
runQueryonBackgroundThread() {
if(mCursor != null)
mCursor.close();
mCursor = query(using the constraint)
return mCursor;
}
我正在向用户显示此数据库
通过使用CustomSimpleCorsorAdapter
CustomSimpleCursorAdapter extends SimpleCursorAdapter
可过滤的
覆盖getView()
和runQueryonBackgroundThread()
。书籍的栅格视图已正确显示 用户具有以下选项: HTML | PDF | PS |删除
Constraint: BOOK FORMAT
[HTML - 1, PDF - 2, PS - 3]
当用户按下HTML菜单选项时,将显示包含HTML的书籍
必须显示类型
在MenuOption handler()中,我写了如下内容:
------------------------------
BOOK NAME | BOOK FORMAT | COUNT |
------------------------------
Android | HTML | 1
WPF | PDF | 10
Symbian | PS | 2
Windows | HTML | 2
adapter.getFilter().filter("1");
runQueryonBackgroundThread() {
if(mCursor != null)
mCursor.close();
mCursor = query(using the constraint)
return mCursor;
}
此约束到达我的重写runQueryonBackgroundThread()
方法。但它不会更新网格视图并引发异常
过滤器:android.view.ViewRoot$CalledFromErrorThreadException:只有
创建视图层次结构的原始线程可以接触其视图“
请帮帮我。我想你把事情搞砸了。实际上,
SimpleCursorAdapter
已经实现了Filterable
,因此无需重新实现它。在列表活动中使用smth,如下所示:
private void filterList(CharSequence constraint) {
final YourListCursorAdapter adapter =
(YourListCursorAdapter) getListAdapter();
final Cursor oldCursor = adapter.getCursor();
adapter.setFilterQueryProvider(filterQueryProvider);
adapter.getFilter().filter(constraint, new FilterListener() {
public void onFilterComplete(int count) {
// assuming your activity manages the Cursor
// (which is a recommended way)
stopManagingCursor(oldCursor);
final Cursor newCursor = adapter.getCursor();
startManagingCursor(newCursor);
// safely close the oldCursor
if (oldCursor != null && !oldCursor.isClosed()) {
oldCursor.close();
}
}
});
}
private FilterQueryProvider filterQueryProvider = new FilterQueryProvider() {
public Cursor runQuery(CharSequence constraint) {
// assuming you have your custom DBHelper instance
// ready to execute the DB request
return dbHelper.getListCursor(constraint);
}
};
嗨,阿希米德,非常感谢你。它工作得很好。:)我还将尝试如何在CustomSimpleCursorAdapter的runQueryonBT中实现它。这很有趣。这在使用装载机时仍然有效吗?我的意思是,与简单地执行restartLoader()相比,使用过滤器查询提供程序有什么优势吗?请看我的问题@faizal:我还没有深入调查过装载机,所以没有权利向您提出任何建议。