Android 无法从类型JobsListAdapter对非静态方法getFilter()进行静态引用

Android 无法从类型JobsListAdapter对非静态方法getFilter()进行静态引用,android,filter,Android,Filter,我尝试过滤自定义listview,然后编写过滤器代码 什么时候叫它 JobsListAdapter.getFilter().filter(s.toString().toLowerCase()); 问题是 无法从类型JobsListAdapter对非静态方法getFilter()进行静态引用 public Filter getFilter() { if(filter == null) filter = new Man

我尝试过滤自定义listview,然后编写过滤器代码

什么时候叫它

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

        }
公共过滤器getFilter()
{
if(filter==null)
过滤器=新的锰氧化物过滤器();
回流过滤器;
}
公共类MangaNameFilter扩展了过滤器
{
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
//注意:此函数是从后台线程*始终*调用的,并且
//不是UI线程。
constraint=constraint.toString().toLowerCase();
FilterResults结果=新的FilterResults();
if(constraint!=null&&constraint.toString().length()>0)
{
ArrayList filt=新的ArrayList();
ArrayList lItems=新的ArrayList();
已同步(此)
{
lItems.addAll(值);
}
对于(int i=0,l=lItems.size();i

请照上面说的帮助我。您需要使方法
成为静态的
,或者创建类的实例并以这种方式访问该方法。差不多

JobsListAdapter myClass = new JobsListAdapter();  // enter your params for the constructor
myClass.getFilter().filter(s.toString().toLowerCase());
或者更改方法签名以包括
静态
修饰符,该修饰符可能是您想要的,也可能不是您想要的

    public static Filter getFilter()
    {
        if(filter == null)
            filter = new MangaNameFilter();
        return filter;
    }
只是一些可能有用的链接


如果您试图只获取一个筛选器实例,则应该是这样

public static Filter getFilter()


取决于你需要什么

你需要有一个
JobsListAdapter
的实例来调用
getFilter()
。是什么让你如此确信这个方法应该是静态的?我正在编写另一个选项,但是看着他的类,我想我会使用它静态。
inputSearch.addTextChangedListener(new TextWatcher()){@Override public void onTextChanged(CharSequence s,int start,int before,int count){JobsListAdapter().getFilter().filter(s.toString().toLowerCase();}}});
我使用它,但方法JobsListAdapter()中存在错误为类型new TextWatcher(){}未定义其新JobsListAdapter()或使方法为静态。解决方案定义为JobsListAdapter ad;并将其称为ad.getFilter().filter(s.toString().toLowerCase());
new JobsListAdapter().getFilter().filter(s.toString().toLowerCase());