我以预期的方式在ListView上启用了文本过滤;在资源定义中添加 android:textFilterEnabled=”true”
并(因为我正在使用SimpleCursorAdapter)设置一个FilterQueryProvider,它提供了一个过滤后的游标,如下所示:
public Cursor runQuery(CharSequence constraint) {
Cursor cur = mDba.fetchTrackers(mCurrentGroupId, constraint.toString());
startManagingCursor(cur);
return cur;
}
我的问题是:一旦用户选择了一个列表项,转到另一个活动,然后返回到这个,我该如何控制先前应用的过滤器的状态?
我现在看到的是,当我返回活动时,正在使用的光标是在创建时在过滤器上设置的未过滤的光标,但是仍然显示他们键入的过滤器文本(并且键入键会导致应用过滤器) .
我想要做的是清除过滤器,或保留活动剩余的过滤光标 .
1 回答
我自己也有同样的问题,虽然我没有在
SimpleCursorAdapter
中设置FilterQueryProvider
,而是在实例化SimpleCursorAdapter
时使用了覆盖的runQueryOnBackgroundThread(CharSequence constraint)
方法 .例如 .
但是如果你想清除过滤器,你需要做的就是获取
ListView
并调用它的clearTextFilter()
方法 . 因此,如果您的活动扩展ListActivity
,您可以使用以下内容:将上面的行添加到重新加载列表中数据的方法中,即每当显示_2745242时 .
或者,如果要保持过滤器处于活动状态,并在用户返回时将其重新应用于
ListActivity
. 您可以从ListActivity
获取当前已经输入的过滤器文本CharSequence
并将其传递给SimpleCursorAdapter
的当前Filter
:再次将上面的行添加到您重新加载列表中的数据的方法中,它将重新应用现有的过滤器 .