编辑:将构建工具版本从 23 升级到 27 后问题解决。
我有以下代码片段:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.findItem(R.id.shareMenuItem).getActionView().setOnClickListener(onShareMenuItemClickedListener);
}
最近我在 Crashlytics 上遇到了一些错误,其中包括 menu.findItem(...) 行:
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>