无法访问public void方法

时间:2018-03-21 15:48:24

标签: java android

我的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;
        }
    });

但由于某种原因,我无法访问该方法。有人可以向我解释为什么会这样吗?

1 个答案:

答案 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的类的实例,无论你怎么称呼它。