0

我尝试过滤自​​定义列表视图并在编写过滤器代码之后

当调用它时

    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();
            }

        }

请帮我

4

2 回答 2

2

正是它所说的。您需要创建方法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;
    }

只是几个可能有用的链接

何时使我的方法静态

了解实例和类成员

于 2013-08-26T20:32:53.277 回答
0

如果您只想获取过滤器的 1 个实例,则应该是这样。

public static Filter getFilter()

或者

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

取决于你需要什么。

于 2013-08-26T20:33:11.817 回答