我想将搜索项添加到我的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。我在片段中。
答案 0 :(得分:0)
您的菜单项没有分配android.widget.SearchView
操作类,因此您从getActionView()
调用中获取null。基本上,您在Android文档中缺少与this example android:actionViewClass
属性相同的代码。
您可以使用setActionView
的{{1}}方法添加它。
另一件事:你不应该只是在代码中编写ID号,因为资源系统无法阻止数字冲突。您需要将MenuItem
放在一个值XML文件中,并将所有<item type="id" name="menu_search"/>
替换为1
。