2010-02-06 59 views
0

我以预期的方式在我的ListView上启用了文本过滤;在资源定义添加android:textFilterEnabled=”true”(正如我使用SimpleCursorAdapter)设置FilterQueryProvider,提供了一个过滤光标,像这样:返回带有文本过滤器的ListView

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

我的问题是这样的:当用户选择一个列表项,熄灭另一活动,并返回到这一个,我如何控制以前应用的过滤器的状态?

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

我想要做的是清除过滤器,或保留活动过滤后的过滤游标。

回答

3

我有同样的问题我自己,虽然不是在SimpleCursorAdapter设置FilterQueryProvider实例化SimpleCursorAdapter当我用了一个overidden 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(); 

上述行添加到方法的列表,您重新加载数据,即只要您ListActivity所示。

或者,如果您想保持过滤器处于活动状态,并在用户返回时重新将其应用于ListActivity。你可以得到当前过滤文本中,已输入,从ListActivityCharSequence,并把它传递给SimpleCursorAdapter目前的Filter

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

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