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);
}