实现搜索字段android
Posted
技术标签:
【中文标题】实现搜索字段android【英文标题】:Implement Search Field android 【发布时间】:2010-12-19 11:41:16 【问题描述】:在 android 上我有很大的列表视图,它必须支持过滤。目前我的实现如下。
EditText 和 TextWatcher 监听文本变化。所有数据都存储在 db 中,当发生 TextChange 事件时,获取一个游标并将新的 CursorAdapter 设置为列表视图。我使用 AsyncTask 来查询数据库并更新 gui。
但是这种方法存在一些问题:
为每个 TextChange 事件启动 AsyncTask。
AsyncTask 应该同步
那么,为列表视图实现搜索字段的最佳方法是哪些元素存储在 db 中。
【问题讨论】:
【参考方案1】:大多数 Adapter 实现也实现了非常有用的 Filterable 接口。
Filter filter = myAdapter.getFilter();
filter.filter(mySearchText);
根据文档 Filter.filter(CharSequence constraint) 确实 - 启动异步过滤操作。调用此方法会取消之前所有未执行的过滤请求,并发布一个稍后将执行的新过滤请求。这完全符合我的需求。
【讨论】:
【参考方案2】:在您的 Activity 中,在启动 AsyncTask 时保持它的静态引用。然后,如果用户在前一个 AsyncTask 完成之前键入了另一个键,则手动取消它并启动另一个键。这应该可以缓解大多数问题(尽管如果它是一个大型数据集,刷新列表可能会遇到一些问题)。类似以下内容应该可以帮助您入门:
private static AsyncTask _currentFilterTask;
public doFilter( String userInput )
if ( _currentFilterTask != null && _currentFilterTask.getStatus().equals() )
_currentFilterTask.cancel( true );
_currentFilterTask = new MyAsyncTask( userInput );
_currentFilterTask.execute( this );
【讨论】:
以上是关于实现搜索字段android的主要内容,如果未能解决你的问题,请参考以下文章
AndroidAndroid开发实现带有反弹效果,仿IOS反弹scrollview详解教程
AndroidAndroid开发实现带有反弹效果,仿IOS反弹scrollview详解教程
AndroidAndroid开发之常用的loading等待效果实现,仿微博等待动画。两种实现方式详解
AndroidAndroid开发初学者实现拨打电话的功能,拨打电话app小demo实现