Java FindItem(R.id.*)抛出NullPointerException
我想为我的菜单项添加Java FindItem(R.id.*)抛出NullPointerException,java,android,nullpointerexception,menu,menuitem,Java,Android,Nullpointerexception,Menu,Menuitem,我想为我的菜单项添加onMenuItemClickListener。问题是,当我尝试访问菜单.findItem(R.id.*)外部onCreateOptions菜单(),我总是得到NullPointerException。由于某些原因,菜单项仍然不适用于任何其他功能,我不知道,为什么 public Menu items_type; @Override public boolean onCreateOptionsMenu(Menu menu) { get
onMenuItemClickListener
。问题是,当我尝试访问菜单.findItem(R.id.*)
外部onCreateOptions菜单()
,我总是得到NullPointerException
。由于某些原因,菜单项仍然不适用于任何其他功能,我不知道,为什么
public Menu items_type;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.items_type, menu);
items_type=menu;
return true;
}
public boolean onPrepareOptionsMenu(Menu menu) {
items_type.clear();
MenuItem.OnMenuItemClickListener common = new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
if(items_type.findItem(R.id.filename).isChecked() && menuItem.getItemId()==R.id.tracktitle)
{
items_type.findItem(R.id.tracktitle).setChecked(true);
items_type.findItem(R.id.filename).setChecked(false);
}
else if(items_type.findItem(R.id.tracktitle).isChecked() && menuItem.getItemId()==R.id.filename)
{
items_type.findItem(R.id.filename).setChecked(true);
items_type.findItem(R.id.tracktitle).setChecked(false);
}
return true;
}
};
items_type.findItem(R.id.tracktitle).setOnMenuItemClickListener(common);
items_type.findItem(R.id.filename).setOnMenuItemClickListener(common);
return true;
}
public void onCreate(Bundle savedInstanceState) {
...
}
/res/menu/items_type.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<group android:id="@id/group"
android:checkableBehavior="single">
<item
android:id="@id/filename"
android:title=" File Names"
app:showAsAction="never"/>
<item
android:id="@id/tracktitle"
android:title="ID3 Titles"
app:showAsAction="never"/>
</group>
</menu>
公共菜单项\u类型;
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.items\u类型,菜单);
项目类型=菜单;
返回true;
}
公共布尔值OnPrepareOptions菜单(菜单){
项目_type.clear();
MenuItem.OnMenuItemClickListener common=新建MenuItem.OnMenuItemClickListener(){
@凌驾
公共布尔onMenuItemClick(MenuItem MenuItem){
if(items_type.findItem(R.id.filename).isChecked()&&menuItem.getItemId()==R.id.tracktitle)
{
items_type.findItem(R.id.tracktitle).setChecked(true);
items_type.findItem(R.id.filename).setChecked(false);
}
else if(items_type.findItem(R.id.tracktitle).isChecked()&&menuItem.getItemId()==R.id.filename)
{
items_type.findItem(R.id.filename).setChecked(true);
items_type.findItem(R.id.tracktitle).setChecked(false);
}
返回true;
}
};
items\u type.findItem(R.id.tracktitle).setOnMenuItemClickListener(公共);
items\u type.findItem(R.id.filename).setOnMenuItemClickListener(公共);
返回true;
}
创建时的公共void(Bundle savedInstanceState){
...
}
/res/menu/items\u type.xml
最好像这样处理菜单单击事件
@凌驾
创建选项菜单(菜单菜单,菜单充气机){
super.onCreateOptions菜单(菜单,充气机);
getMenuInflater().充气(R.menu.items\u类型,菜单);
}
最好像这样处理菜单单击事件 @凌驾 创建选项菜单(菜单菜单,菜单充气机){ super.onCreateOptions菜单(菜单,充气机); getMenuInflater().充气(R.menu.items\u类型,菜单); }
但是如何从OnOptions ItemSelected中访问其他菜单项(selected除外)?我执行了您的代码,我能知道您为什么使用items_type.clear();在OnPrepareOptions菜单中,这导致了空指针异常。。当我删除它时,它正在工作NoOptions selected仅用于选定的项。但是如何从OnOptions ItemSelected访问其他菜单项(选定项除外)?我执行了您的代码,我可以知道您为什么使用items_type.clear();在OnPrepareOptions菜单中,这导致了空指针异常。。当我删除它时,它正在工作NoOptions selected仅适用于选定的项目。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int i = item.getItemId();
if (i == android.R.id.home) {
} else if (i == R.id.action_share_pdf) {
}
return super.onOptionsItemSelected(item);
}