我有这个方法 RecyclerView.Adapter
public void filter(String text) {
mDataSet.clear();
if(text.isEmpty()){
mDataSet.addAll(mDataSet);
} else{
text = text.toLowerCase();
for(AppInfo item: mDataSet){
if(item.getAppName().toLowerCase().contains(text)){
mDataSet.add(item);
}
}
}
notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud)
我试图Activity通过调用来访问它:
search_view.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
//Here is where I'm trying to call the method
mAdapter.filter(query);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,我无法访问该方法.有人可以向我解释为什么会这样吗?
您已声明mAdapter为a RecyclerView.Adapter,因此您只能访问声明的方法RecyclerView.Adapter,而不是您的自定义类.举个例子,假设您有两个类:
public class Adapter {
public void firstMethod() {}
}
public class ExtendedAdapter extends Adapter {
public void secondMethod() {}
}
Run Code Online (Sandbox Code Playgroud)
mAdapter为实例Adapter,则只能调用,firstMethod()因为编译器只知道该方法.mAdapter是一个实例ExtendedAdapter,您将能够firstMethond()通过继承访问,以及secondMethod()只能属于ExtendedAdapter.所以基本上你需要声明mAdapter为扩展的类的实例RecyclerView.Adapter,无论你怎么称呼它.