簡體   English   中英

無法訪問公共無效方法

[英]Can't access public void method

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

我正在嘗試通過以下方式從我的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;
        }
    });

但是由於某種原因,我無法訪問該方法。 有人可以向我解釋為什么嗎?

您已將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()以及僅屬於ExtendedAdapter secondMethod()

因此,基本上,您需要將mAdapter聲明為擴展RecyclerView.Adapter的類的實例,無論您如何調用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM