我有一个在viewPager中实现SearchView.OnQueryTextListener
的片段。每次搜索文本更改时都会正确调用onQueryTextChange
(我可以记录它,它可以正常工作)。问题是当我尝试调用我的RecyclerView适配器的公共函数时:
@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 ..
我不确定我的代码的哪一部分会在本主题中显示出来。请随意问我想看什么。
- 编辑,我添加我的听众的方式,它显然不是最佳的,也许问题来自那里:
在包含包含片段的视图寻呼机的活动中:
@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;
}
谢谢,
答案 0 :(得分:0)
它确实来自我编写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指出这一点。