onCreateOptionsMenu仅在奥利奥

时间:2018-04-03 14:04:16

标签: android nullpointerexception oncreateoptionsmenu

编辑:将Build Tools版本从23升级到27后问题解决了。

我有以下代码段:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    menu.findItem(R.id.shareMenuItem).getActionView().setOnClickListener(onShareMenuItemClickedListener);
}

最近我在使用line menu.findItem(...)的Crashlytics上遇到了一些错误:

Fatal Exception: java.lang.NullPointerException: Attempt to invoke interface method 'android.view.View android.view.MenuItem.getActionView()' on a null object reference
   at pl.application.ProductViewFragment.onCreateOptionsMenu(SourceFile:434)
   at android.support.v4.app.Fragment.performCreateOptionsMenu(SourceFile:2186)
   at android.support.v4.app.FragmentManagerImpl.dispatchCreateOptionsMenu(SourceFile:2250)
   at android.support.v4.app.FragmentController.dispatchCreateOptionsMenu(SourceFile:328)
   at android.support.v4.app.FragmentActivity.onCreatePanelMenu(SourceFile:363)

问题不确定,仅在Android Oreo上显示(由Fabric - 100%的崩溃在Android 8.0,不同的设备上)。我之前从未遇到过这条线的问题。 Android 8.0中是否有任何重要更改能够导致NPE出现?我试过在我的小米米A1上重现它,但没有效果。或者可能有一种解决方法?

谢谢!

//编辑:添加了xml菜单文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:res="http://schemas.android.com/apk/res-auto">

<item
    android:id="@+id/breadcrumbsMenuItem"
    android:icon="@drawable/ic_breadcrumbs"
    android:title="@string/breadcrumbs"
    res:showAsAction="always" />

<item
    android:id="@+id/shareMenuItem"
    android:icon="@drawable/ic_menu_share"
    android:title="@string/share"
    res:actionLayout="@layout/layout_share_button"
    res:showAsAction="always" />

</menu>

2 个答案:

答案 0 :(得分:0)

试着添加这样的东西,看它是否仍然是空的

Handler handler = new Handler();
handler.postDelayed(new Runnable()
{
    public void run()
    {
        menu.findItem(R.id.shareMenuItem).getActionView().setOnClickListener(onShareMenuItemClickedListener);
    }
}, 2000);

如果这样可以解决问题,那么他成为null的原因是仍然没有创建并且你想要所有rdy试图访问它

当我尝试根据程序启动时获得的一些信息更改菜单图标的颜色时,我确实遇到了问题,并且“work arround”将问题解决了我

答案 1 :(得分:0)

我不确定你在哪里res:...,但我认为它应该是app:...

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:res="http://schemas.android.com/apk/res-auto">

<item
    android:id="@+id/breadcrumbsMenuItem"
    android:icon="@drawable/ic_breadcrumbs"
    android:title="@string/breadcrumbs"
    app:showAsAction="always" />

<item
    android:id="@+id/shareMenuItem"
    android:icon="@drawable/ic_menu_share"
    android:title="@string/share"
    app:actionLayout="@layout/layout_share_button"
    app:showAsAction="always" />

</menu>