2013-02-23 162 views
0

我的應用程序中的listview過濾器出現問題。在KartyListFragment.java我宣佈:Android中的ListAdapter過濾器

ListAdapter adapter = new SimpleCursorAdapter(ctx, 
    R.layout.karty_list_item, db.getKarty(), from, to, 0); 

現在StartActivity.java在onCreate方法我的EditText和TextWatcher。

EditText searchInput = (EditText) findViewById(R.id.search_edit_text); 

    watcher = new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      KartyListFragment.this.adapter.getFilter().filter(s); //THIS ROW IS WRONG 
      //it doesn't know getFilter() 

     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { } 

     @Override 
     public void afterTextChanged(Editable s) { } 
    }; 

    searchInput.addTextChangedListener(watcher); 

in OnTextChanged方法我需要調用適配器的getFilter()方法,但它寫入錯誤。我讀了幾個教程。有使用ArrayAdapters和我使用列表(光標)。你有什麼主意嗎?

回答

0

將您的適配器從ListAdapter更改爲CursorAdapter。 A ListAdapter沒有實現'getFilter`方法。順便說一句,你需要實現一個QueryFilterProvider來在後臺運行你的查詢並對列表進行實際的過濾。

+0

很好,謝謝。但是現在在OnTextChanged方法(KartyListFragment.this。下劃線)中出現錯誤「範圍內沒有可以訪問類型的封閉實例」 – 2013-02-23 16:07:12

+0

請確保您的'adapter'是實例變量而不是本地變量。 – ebarrenechea 2013-02-23 16:14:52

0

變化ListAdapterSimpleAdapter

這些對我的工作:) SimpleAdaptergetFilter方法