首页 文章

返回带有文本过滤器的ListView

提问于
浏览
0

我以预期的方式在ListView上启用了文本过滤;在资源定义中添加 android:textFilterEnabled=”true” 并(因为我正在使用SimpleCursorAdapter)设置一个FilterQueryProvider,它提供了一个过滤后的游标,如下所示:

public Cursor runQuery(CharSequence constraint) {
    Cursor cur = mDba.fetchTrackers(mCurrentGroupId, constraint.toString());
    startManagingCursor(cur);
    return cur;
}

我的问题是:一旦用户选择了一个列表项,转到另一个活动,然后返回到这个,我该如何控制先前应用的过滤器的状态?

我现在看到的是,当我返回活动时,正在使用的光标是在创建时在过滤器上设置的未过滤的光标,但是仍然显示他们键入的过滤器文本(并且键入键会导致应用过滤器) .

我想要做的是清除过滤器,或保留活动剩余的过滤光标 .

1 回答

  • 3

    我自己也有同样的问题,虽然我没有在 SimpleCursorAdapter 中设置 FilterQueryProvider ,而是在实例化 SimpleCursorAdapter 时使用了覆盖的 runQueryOnBackgroundThread(CharSequence constraint) 方法 .
    例如 .

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.list, cursor, from, to) {  
    
       @Override  
       public Cursor runQueryOnBackgroundThread(CharSequence constraint){  
          Cursor cur = mDba.fetchTrackers(mCurrentGroupId, constraint.toString());
          startManagingCursor(cur);  
          return cur;  
       }  
    };
    

    但是如果你想清除过滤器,你需要做的就是获取 ListView 并调用它的 clearTextFilter() 方法 . 因此,如果您的活动扩展 ListActivity ,您可以使用以下内容:

    ListView lv = getListView();    
    lv.clearTextFilter();
    

    将上面的行添加到重新加载列表中数据的方法中,即每当显示_2745242时 .

    或者,如果要保持过滤器处于活动状态,并在用户返回时将其重新应用于 ListActivity . 您可以从 ListActivity 获取当前已经输入的过滤器文本 CharSequence 并将其传递给 SimpleCursorAdapter 的当前 Filter

    adapter.getFilter().filter(lv.getTextFilter());
    

    再次将上面的行添加到您重新加载列表中的数据的方法中,它将重新应用现有的过滤器 .

相关问题