Android 无法从类型JobsListAdapter对非静态方法getFilter()进行静态引用
我尝试过滤自定义listview,然后编写过滤器代码 什么时候叫它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
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());