实现搜索字段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实现

AndroidAndroid开发实现进度条效果,SeekBar的简单使用。音量,音乐播放进度,视频播放进度等

AndroidAndroid开发小功能,倒计时的实现。时间计时器倒计时功能。