2013-08-26 54 views
0

我试图筛选自定义列表视图和后过滤不能使从类型JobsListAdapter的静态引用非静态方法用getFilter()

的写代码,当调用它

JobsListAdapter.getFilter().filter(s.toString().toLowerCase()); 

和问题,所述

无法使静态参考从类型JobsListAdapter的非静态方法用getFilter()

public Filter getFilter() 
     { 
      if(filter == null) 
       filter = new MangaNameFilter(); 
      return filter; 
     } 

    public class MangaNameFilter extends Filter 
     { 

      @Override 
      protected FilterResults performFiltering(CharSequence constraint) { 
       // NOTE: this function is *always* called from a background thread, and 
       // not the UI thread. 
       constraint = constraint.toString().toLowerCase(); 
       FilterResults result = new FilterResults(); 
       if(constraint != null && constraint.toString().length() > 0) 
       { 
        ArrayList<Jobs> filt = new ArrayList<Jobs>(); 
        ArrayList<Jobs> lItems = new ArrayList<Jobs>(); 
        synchronized (this) 
        { 
         lItems.addAll(values); 
        } 
        for(int i = 0, l = lItems.size(); i < l; i++) 
        { 
         Jobs m = lItems.get(i); 
         if(m.name.toLowerCase().contains(constraint)) 
          filt.add(m); 
        } 
        result.count = filt.size(); 
        result.values = filt; 
       } 
       else 
       { 
        synchronized(this) 
        { 
         result.values = values; 
         result.count = values.size(); 
        } 
       } 
       return result; 
      } 

      @SuppressWarnings("unchecked") 
      @Override 
      protected void publishResults(CharSequence constraint, FilterResults results) { 
       // NOTE: this function is *always* called from the UI thread. 
       filtered = (ArrayList<Jobs>)results.values; 
       notifyDataSetChanged(); 
       clear(); 
       for(int i = 0, l = filtered.size(); i < l; i++) 
        add(filtered.get(i)); 
       notifyDataSetInvalidated(); 
      } 

     } 

请帮我

+1

您需要有一个'JobsListAdapter'实例来调用'getFilter()'。 –

回答

1

正是它说的。您需要制定方法static或创建该类的实例并以此方式访问该方法。像

JobsListAdapter myClass = new JobsListAdapter(); // enter your params for the constructor 
myClass.getFilter().filter(s.toString().toLowerCase()); 

或改变方法签名的东西包括:static修改这可能是也可能不是你想要的。

public static Filter getFilter() 
    { 
     if(filter == null) 
      filter = new MangaNameFilter(); 
     return filter; 
    } 

只是一对夫妇的联系,可能会有帮助

When to make my method static

Understanding instance and class members

+0

好的,它工作吗? – codeMagic

+0

解决方案是 定义了JobsListAdapter ad; 并称之为 ad.getFilter()。filter(s.toString()。toLowerCase()); –

0

它应该是,如果你试图让只有1过滤器的实例。

public static Filter getFilter() 

new JobsListAdapter().getFilter().filter(s.toString().toLowerCase()); 

根据你所需要的。

+0

是什么让你确信该方法应该是静态的? –

+0

我正在写另一个选项,但看着他的课,我想我会用它静态的。 –

+0

'inputSearch.addTextChangedListener(新TextWatcher(){ @覆盖 公共无效onTextChanged(CharSequence中,诠释开始,诠释之前, 诠释计数){ \t JobsListAdapter()。用getFilter()。过滤器(S 。的ToString()toLowerCase());} });' 我使用它,但在 方法JobsListAdapter(误差)是未定义的类型新TextWatcher(){} –

相关问题