我有一个片段,它在viewPager中实现SearchView.OnQueryTextListener
。每次搜索文本更改时都会正确调用CCD_ 2(我可以记录它,它工作得很好)。问题是,当我试图调用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;
}
它总是空的,即使我的适配器明确不是空的,因为我的RecyclerView工作正常。。。我的mRecyclerView也是一样,总是空的。。
我不确定在这个主题中显示我的代码的哪一部分是有用的。免费订阅,问我你想看什么。
--编辑,我添加Listener的方式,显然不是最佳的,也许问题来自于此:
在包含包含片段的视图寻呼机的活动中:
@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指出这一点。