2013-08-26 81 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(){} –

相關問題