编辑:将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>
答案 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>