无法访问public void方法

Cla*_*ssA 1 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();
}
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)

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

Mic*_*odd 9

您已声明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,无论你怎么称呼它.