OnQueryTextListener,无法访问 class 成员(我的 RecyclerView 或我的适配器出现空指针异常)
OnQueryTextListener, can't access class members (null pointer exception with my RecyclerView or my Adapter)
我有一个在 viewPager 中实现 SearchView.OnQueryTextListener
的片段。每次搜索文本更改时都会正确调用 onQueryTextChange
(我可以记录它工作正常)。问题是,当我尝试调用我的 RecyclerView 适配器的 public 函数时,例如:
@Override
public boolean onQueryTextChange(String newText) {
Log.i("", "search newText " + newText);
if(mMembersRecyclerAdapter!=null){
mMembersRecyclerAdapter.filterSearch(newText);
}
//((MembersRecyclerAdapter) mRecyclerView.getAdapter()).filterSearch(newText);
return true;
}
它始终为 null,即使我的适配器绝对不为 null,因为我的 RecyclerView 正常工作...我的 mRecyclerView 也一样,始终为 null..
我不确定我的代码的哪一部分适合显示在本主题中。有空问我想看什么
-- 编辑,我添加监听器的方式,显然不是最优的,也许问题出在这里:
在 activity 包含片段的视图寻呼机中:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
switch (mFragmentSelected){
case PAGE_MEMBERS:
getMenuInflater().inflate(R.menu.main_pager_member_page, menu);
MenuItem searchItem = menu.findItem(R.id.search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setOnQueryTextListener((MainPagerMembersFragment) mViewPagerAdapter.getItem(PAGE_MEMBERS));
break;
default:
getMenuInflater().inflate(R.menu.main_pager, menu);
break;
}
return true;
}
谢谢,
它确实来自我编写 getItem() 的方式,
现在 getItem 看起来像这样:
@Override
public Fragment getItem(int position) {
if(!fragments.containsKey(position)){
switch (position) {
case PAGE_FEED:
fragments.put(PAGE_FEED, MainPagerNewsFeed.newInstance());
case PAGE_MEMBERS:
fragments.put(PAGE_MEMBERS, MainPagerMembersFragment.newInstance());
case PAGE_NOTIFS:
fragments.put(PAGE_NOTIFS, MainPagerNotifsFragment.newInstance());
default:
break;
}
}
return fragments.get(position);
}
我有这个
private ArrayMap<Integer, Fragment> fragments = new ArrayMap<>(NUM_ITEMS);
作为我的 ViewPager 适配器的私有成员
感谢 Luksprog 指出这一点。
我有一个在 viewPager 中实现 SearchView.OnQueryTextListener
的片段。每次搜索文本更改时都会正确调用 onQueryTextChange
(我可以记录它工作正常)。问题是,当我尝试调用我的 RecyclerView 适配器的 public 函数时,例如:
@Override
public boolean onQueryTextChange(String newText) {
Log.i("", "search newText " + newText);
if(mMembersRecyclerAdapter!=null){
mMembersRecyclerAdapter.filterSearch(newText);
}
//((MembersRecyclerAdapter) mRecyclerView.getAdapter()).filterSearch(newText);
return true;
}
它始终为 null,即使我的适配器绝对不为 null,因为我的 RecyclerView 正常工作...我的 mRecyclerView 也一样,始终为 null..
我不确定我的代码的哪一部分适合显示在本主题中。有空问我想看什么
-- 编辑,我添加监听器的方式,显然不是最优的,也许问题出在这里:
在 activity 包含片段的视图寻呼机中:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
switch (mFragmentSelected){
case PAGE_MEMBERS:
getMenuInflater().inflate(R.menu.main_pager_member_page, menu);
MenuItem searchItem = menu.findItem(R.id.search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setOnQueryTextListener((MainPagerMembersFragment) mViewPagerAdapter.getItem(PAGE_MEMBERS));
break;
default:
getMenuInflater().inflate(R.menu.main_pager, menu);
break;
}
return true;
}
谢谢,
它确实来自我编写 getItem() 的方式,
现在 getItem 看起来像这样:
@Override
public Fragment getItem(int position) {
if(!fragments.containsKey(position)){
switch (position) {
case PAGE_FEED:
fragments.put(PAGE_FEED, MainPagerNewsFeed.newInstance());
case PAGE_MEMBERS:
fragments.put(PAGE_MEMBERS, MainPagerMembersFragment.newInstance());
case PAGE_NOTIFS:
fragments.put(PAGE_NOTIFS, MainPagerNotifsFragment.newInstance());
default:
break;
}
}
return fragments.get(position);
}
我有这个
private ArrayMap<Integer, Fragment> fragments = new ArrayMap<>(NUM_ITEMS);
作为我的 ViewPager 适配器的私有成员
感谢 Luksprog 指出这一点。