OnQueryTextListener,无法访问类成员(使用我的RecyclerView或我的适配器的空指针异常)

时间:2015-11-18 11:30:11

标签: android android-fragments searchview

我有一个在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;
    }

谢谢,

1 个答案:

答案 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指出这一点。