【问题标题】:FindItem(R.id.*) throws NullPointerExceptionFindItem(R.id.*) 抛出 NullPointerException
【发布时间】:2019-08-09 18:23:42
【问题描述】:

我想为我的菜单条目添加onMenuItemClickListener。问题是当我尝试在onCreateOptionsMenu() 之外访问menu.findItem(R.id.*) 时,我总是得到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>

【问题讨论】:

    标签: java android nullpointerexception menu menuitem


    【解决方案1】:

    最好像这样处理菜单点击事件 @覆盖 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); getMenuInflater().inflate(R.menu.items_type, menu); }

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

    【讨论】:

    • 但是如何从 onOptionsItemSelected 访问其他菜单项(选择的除外)?
    • 我执行了你的代码,我能知道你为什么使用 items_type.clear();在 onPrepareOptionsMenu 这导致我出现空指针异常.. 当我删除它时它正在工作
    • onOptionsSelected 仅适用于选定项目。
    猜你喜欢
    • 1970-01-01
    • 2017-08-11
    • 2013-09-07
    • 2013-06-18
    • 2016-07-07
    • 2014-10-02
    • 2012-05-21
    • 2014-08-15
    • 2013-08-06
    相关资源
    最近更新 更多