2013-02-23 176 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方法