2010-02-06 20 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()); 

上面的行重新添加到您重新方法加載列表中的數據,它將重新應用現有的過濾器。