我的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();
}
我试图通过调用:{/ p>从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;
}
});
但由于某种原因,我无法访问该方法。有人可以向我解释为什么会这样吗?
答案 0 :(得分:9)
您已将mAdapter
声明为RecyclerView.Adapter
,因此您只能访问RecyclerView.Adapter
中声明的方法,而不是自定义类。举个例子,假设您有两个类:
public class Adapter {
public void firstMethod() {}
}
public class ExtendedAdapter extends Adapter {
public void secondMethod() {}
}
mAdapter
声明为Adapter
的实例,则您只能调用firstMethod()
,因为编译器只知道该方法。 mAdapter
声明为ExtendedAdapter
的实例,则您可以通过继承访问firstMethond()
,以及secondMethod()
仅属于ExtendedAdapter
。所以基本上你需要将mAdapter
声明为扩展RecyclerView.Adapter
的类的实例,无论你怎么称呼它。