Android 非静态方法&x27;getFilter()';无法从静态上下文引用

Android 非静态方法&x27;getFilter()';无法从静态上下文引用,android,Android,正在尝试添加搜索筛选器 请帮助我在项目中添加searchView。我正在制作一个TODO应用程序,所以我想在我的recyclerview上添加searchview,这会导致一个问题。我们怎样才能解决这个问题 @Override public boolean onQueryTextChange(String newText) { TODOAdapter.getFilter().filter(newText); (Shows error: No

正在尝试添加搜索筛选器

请帮助我在项目中添加searchView。我正在制作一个TODO应用程序,所以我想在我的recyclerview上添加searchview,这会导致一个问题。我们怎样才能解决这个问题

        @Override
        public boolean onQueryTextChange(String newText) {
            TODOAdapter.getFilter().filter(newText); (Shows error: Non-static method 'getFilter()' cannot be referenced from a static context)
            return false;
        }
    });
我的适配器类

公共类ToLoadapter扩展了RecyclerView。适配器实现可过滤{
private List todo=new ArrayList();
列出托多利斯特;
私人监听;
@非空
@凌驾
public TODOHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
View itemView=LayoutInflater.from(parent.getContext())
.充气(R.layout.task_项,父项,false);
返回新的TODOHolder(itemView);
}
@凌驾
BindViewHolder上的公共void(@NonNull ToLoadapter.TODOHolder holder,int位置){
TODO currentTask=TODO.get(位置);
holder.textViewTitle.setText(currentTask.getTitle());
holder.textViewDescription.setText(currentTask.getDescription());
holder.textViewDateButton.setText(currentTask.getDate_button());
holder.textViewTimeButton.setText(currentTask.getTime_button());
holder.textViewPriority.setText(String.valueOf(currentTask.getPriority());
}
@凌驾
public int getItemCount(){
返回todo.size();
}
公共无效设置待办事项(列表待办事项){
this.todo=todo;
this.todoList=newarraylist(todo);
notifyDataSetChanged();
}
公共TODO getTaskAt(内部位置){
返回todo.get(位置);
}
@凌驾
公共过滤器getFilter(){
返回新筛选器(){
@凌驾
受保护过滤器结果执行过滤(CharSequence CharSequence){
String charString=charSequence.toString();
if(charString.isEmpty()){
托多利斯特=托多;
}否则{
List filteredList=新建ArrayList();
用于(待办事项行:待办事项){
if(row.getTitle().toLowerCase().contains(charString.toLowerCase())| | row.getDescription().contains(charSequence)){
filteredList.add(行);
}
}
todoList=过滤器列表;
}
FilterResults FilterResults=新的FilterResults();
filterResults.values=todoList;
返回过滤器结果;
}
@凌驾
受保护的无效发布结果(CharSequence CharSequence、FilterResults FilterResults){
todoList=(ArrayList)filterResults.values;
notifyDataSetChanged();
}
};
}
类TODOHolder扩展了RecyclerView.ViewHolder{
私有文本视图文本视图标题;
私有文本视图文本视图描述;
私有文本视图文本视图优先级;
私有文本视图文本视图日期按钮;
私有文本查看文本查看时间按钮;
公共TODOHolder(查看项目视图){
超级(项目视图);
textViewTitle=itemView.findViewById(R.id.text\u view\u title);
textViewDescription=itemView.findViewById(R.id.text\u view\u description);
textViewDateButton=itemView.findViewById(R.id.text\u view\u date\u按钮);
textViewTimeButton=itemView.findViewById(R.id.text\u view\u time\u按钮);
textViewPriority=itemView.findViewById(R.id.text\u view\u priority);
itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
int position=getAdapterPosition();
if(侦听器!=null&&position!=RecyclerView.NO\u位置){
listener.onItemClick(todo.get(position));
}
}
});
}
}
公共接口侦听器{
void-onItemClick(TODO-TODO);
}
公共void setOnItemClickListener(OnItemClickListener侦听器){
this.listener=listener;
}
}

发生此错误是因为您正在使用类名ToLoadapter访问getFilter方法。相反,您应该使用TODOAdapter的实例

在活动中创建ToLoadapter对象:

private TODOAdapter todoAdapter = new TODOAdapter() ;
现在在onQueryTextChange方法中,使用ToLoadapter调用getFilter方法

@Override
public boolean onQueryTextChange(String newText) {
    todoApapter.getFilter().filter(newText); (Shows error: Non-static method 'getFilter()' cannot be referenced from a static context)
    return false;
}

您之所以看到这个错误,是因为getFilter方法不是静态的,但是您试图像使用静态方法一样使用它。我假设您在调用
onQueryTextChange
之前的某个地方有一个适配器类的实例,因此您应该能够在实例上调用
getFilter()
,而不是
toload apter.getFilter()