项目以编程方式添加到ActionBar

时间:2014-11-23 13:24:03

标签: java android xml

我想将搜索项添加到我的ActionBar中。我写了这段代码。

@Override
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
         super.onCreateOptionsMenu(menu, inflater);
         menu.add(0, 1, Menu.NONE, "Search").setIcon(R.drawable.ic_action_search).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

         searchView = (SearchView)MenuItemCompat.getActionView(menu.findItem(1));

         searchView.setOnQueryTextListener(new OnQueryTextListener() {

            @Override
            public boolean onQueryTextChange(String arg0) {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public boolean onQueryTextSubmit(String arg0) {
                // TODO Auto-generated method stub
                return false;
            }

         });

     }

但是当我使用此错误运行应用程序崩溃时

11-23 14:17:45.294: E/AndroidRuntime(28399): java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.SearchView.setOnQueryTextListener(android.support.v7.widget.SearchView$OnQueryTextListener)' on a null object reference

好吧,logcat说searchView是null但是为什么?他的id为1,我发现带有findItem方法的项目传递项目的id为1.我该如何解决?

P.S。我在片段中。

1 个答案:

答案 0 :(得分:0)

您的菜单项没有分配android.widget.SearchView操作类,因此您从getActionView()调用中获取null。基本上,您在Android文档中缺少与this example android:actionViewClass属性相同的代码。

您可以使用setActionView的{​​{1}}方法添加它。

另一件事:你不应该只是在代码中编写ID号,因为资源系统无法阻止数字冲突。您需要将MenuItem放在一个值XML文件中,并将所有<item type="id" name="menu_search"/>替换为1