显示 OptionsMenu 时出现 NullPointerException
NullPointerException while displaying OptionsMenu
我需要以编程方式创建菜单(与选项卡列表完全相同)以支持我的应用程序中的导航。所以我做了这样的代码
public override bool OnCreateOptionsMenu (IMenu menu)
{
base.OnCreateOptionsMenu (menu);
for (int i = 0; i < fragmentsTabs.Count; i++) {
menu.Add(0,100 + i,i,new Java.Lang.String(fragmentsTabs.GetItem(i).Key));
}
return true;
}
但是当我点击菜单按钮时,出现了这样的异常:
[AndroidRuntime] java.lang.NullPointerException
[AndroidRuntime] at android.support.v7.internal.view.menu.ListMenuItemView.setTitle(ListMenuItemView.java:117)
[AndroidRuntime] at android.support.v7.internal.view.menu.ListMenuItemView.initialize(ListMenuItemView.java:104)
[AndroidRuntime] at android.support.v7.internal.view.menu.MenuPopupHelper$MenuAdapter.getView(MenuPopupHelper.java:377)
[AndroidRuntime] at android.support.v7.internal.view.menu.MenuPopupHelper.measureContentWidth(MenuPopupHelper.java:219)
[AndroidRuntime] at android.support.v7.internal.view.menu.MenuPopupHelper.tryShow(MenuPopupHelper.java:153)
[AndroidRuntime] at android.support.v7.widget.ActionMenuPresenter$OpenOverflowRunnable.run(ActionMenuPresenter.java:752)
[AndroidRuntime] at android.os.Handler.handleCallback(Handler.java:733)
[AndroidRuntime] at android.os.Handler.dispatchMessage(Handler.java:95)
[AndroidRuntime] at android.os.Looper.loop(Looper.java:136)
[AndroidRuntime] at android.app.ActivityThread.main(ActivityThread.java:5017)
[AndroidRuntime] at java.lang.reflect.Method.invokeNative(Native Method)
[AndroidRuntime] at java.lang.reflect.Method.invoke(Method.java:515)
[AndroidRuntime] at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
[AndroidRuntime] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
[AndroidRuntime] at dalvik.system.NativeStart.main(Native Method)
[AndroidRuntime] at android.support.v7.internal.view.menu.MenuPopupHel08.448 W/ActivityManager( 575): Force finishing activity pl.media30.android.parlament/aplikacjaparlamentandroid.PersonDetailsActivity
我正在使用支持库中的工具栏:
Toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
SetSupportActionBar(Toolbar);
SupportActionBar.SetHomeButtonEnabled(true);
SupportActionBar.SetDisplayHomeAsUpEnabled(true);
在另一个 phone 上,我获得了有关 NullPointerException 的更多信息:
[AndroidRuntime] java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
[AndroidRuntime] at android.support.v7.internal.view.menu.ListMenuItemView.setTitle(ListMenuItemView.java:117)
[AndroidRuntime] at android.support.v7.internal.view.menu.ListMenuItemView.initialize(ListMenuItemView.java:104)
[AndroidRuntime] at android.support.v7.internal.view.menu.MenuPopupHelper$MenuAdapter.getView(MenuPopupHelper.java:377)
[AndroidRuntime] at android.support.v7.internal.view.menu.MenuPopupHelper.measureContentWidth(MenuPopupHelper.java:219)
[AndroidRuntime] at android.support.v7.internal.view.menu.MenuPopupHelper.tryShow(MenuPopupHelper.java:153)
[AndroidRuntime] at android.support.v7.widget.ActionMenuPresenter$OpenOverflowRunnable.run(ActionMenuPresenter.java:752)
[AndroidRuntime] at android.os.Handler.handleCallback(Handler.java:739)
[AndroidRuntime] at android.os.Handler.dispatchMessage(Handler.java:95)
[AndroidRuntime] at android.os.Looper.loop(Looper.java:135)
[AndroidRuntime] at android.app.ActivityThread.main(ActivityThread.java:5221)
[AndroidRuntime] at java.lang.reflect.Method.invoke(Native Method)
[AndroidRuntime] at java.lang.reflect.Method.invoke(Method.java:372)
[AndroidRuntime] at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
[AndroidRuntime] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
有人知道为什么没有创建 TextView 吗?什么是问题。我在这个 activity 中有很多片段,但没有一个在使用菜单。如果我创建单个图标,例如搜索,一切正常。图标已正确创建并且 onclick 已得到妥善处理。仅当菜单项未显示为操作时才会出现问题
@编辑
我的工具栏 axml 是:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary">
<ImageView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="end"
android:scaleType="fitEnd"
android:src="@drawable/side" />
</android.support.v7.widget.Toolbar>
我遇到了同样的问题大约 2 个小时。然后在尝试了一切之后我决定 "Clean All" 项目。在我这样做之后,一切都像一个魅力。我在项目中更改并可能有所帮助的另一件事是用 Support.v4 替换所有正常的 Fragment 导入。
希望对您有所帮助!
有完全相同的问题。对我来说,解决方案不是 "Build -> Clean" 项目。这没有用!
起作用的是 Surbhit Rao 对另一个堆栈溢出的回答 post:
- 单击位于 Android Studio
右上角的 Gradle 窗格
- 导航到您的项目,然后是任务 -> 构建 ->cleanBuildCache
- 右击cleanBuildCache,运行它。
- 完成后一定要 运行 -> "Run App" 以避免 运行 一遍又一遍地使用 cleanBuildCache 脚本。
我需要以编程方式创建菜单(与选项卡列表完全相同)以支持我的应用程序中的导航。所以我做了这样的代码
public override bool OnCreateOptionsMenu (IMenu menu)
{
base.OnCreateOptionsMenu (menu);
for (int i = 0; i < fragmentsTabs.Count; i++) {
menu.Add(0,100 + i,i,new Java.Lang.String(fragmentsTabs.GetItem(i).Key));
}
return true;
}
但是当我点击菜单按钮时,出现了这样的异常:
[AndroidRuntime] java.lang.NullPointerException
[AndroidRuntime] at android.support.v7.internal.view.menu.ListMenuItemView.setTitle(ListMenuItemView.java:117)
[AndroidRuntime] at android.support.v7.internal.view.menu.ListMenuItemView.initialize(ListMenuItemView.java:104)
[AndroidRuntime] at android.support.v7.internal.view.menu.MenuPopupHelper$MenuAdapter.getView(MenuPopupHelper.java:377)
[AndroidRuntime] at android.support.v7.internal.view.menu.MenuPopupHelper.measureContentWidth(MenuPopupHelper.java:219)
[AndroidRuntime] at android.support.v7.internal.view.menu.MenuPopupHelper.tryShow(MenuPopupHelper.java:153)
[AndroidRuntime] at android.support.v7.widget.ActionMenuPresenter$OpenOverflowRunnable.run(ActionMenuPresenter.java:752)
[AndroidRuntime] at android.os.Handler.handleCallback(Handler.java:733)
[AndroidRuntime] at android.os.Handler.dispatchMessage(Handler.java:95)
[AndroidRuntime] at android.os.Looper.loop(Looper.java:136)
[AndroidRuntime] at android.app.ActivityThread.main(ActivityThread.java:5017)
[AndroidRuntime] at java.lang.reflect.Method.invokeNative(Native Method)
[AndroidRuntime] at java.lang.reflect.Method.invoke(Method.java:515)
[AndroidRuntime] at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
[AndroidRuntime] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
[AndroidRuntime] at dalvik.system.NativeStart.main(Native Method)
[AndroidRuntime] at android.support.v7.internal.view.menu.MenuPopupHel08.448 W/ActivityManager( 575): Force finishing activity pl.media30.android.parlament/aplikacjaparlamentandroid.PersonDetailsActivity
我正在使用支持库中的工具栏:
Toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
SetSupportActionBar(Toolbar);
SupportActionBar.SetHomeButtonEnabled(true);
SupportActionBar.SetDisplayHomeAsUpEnabled(true);
在另一个 phone 上,我获得了有关 NullPointerException 的更多信息:
[AndroidRuntime] java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
[AndroidRuntime] at android.support.v7.internal.view.menu.ListMenuItemView.setTitle(ListMenuItemView.java:117)
[AndroidRuntime] at android.support.v7.internal.view.menu.ListMenuItemView.initialize(ListMenuItemView.java:104)
[AndroidRuntime] at android.support.v7.internal.view.menu.MenuPopupHelper$MenuAdapter.getView(MenuPopupHelper.java:377)
[AndroidRuntime] at android.support.v7.internal.view.menu.MenuPopupHelper.measureContentWidth(MenuPopupHelper.java:219)
[AndroidRuntime] at android.support.v7.internal.view.menu.MenuPopupHelper.tryShow(MenuPopupHelper.java:153)
[AndroidRuntime] at android.support.v7.widget.ActionMenuPresenter$OpenOverflowRunnable.run(ActionMenuPresenter.java:752)
[AndroidRuntime] at android.os.Handler.handleCallback(Handler.java:739)
[AndroidRuntime] at android.os.Handler.dispatchMessage(Handler.java:95)
[AndroidRuntime] at android.os.Looper.loop(Looper.java:135)
[AndroidRuntime] at android.app.ActivityThread.main(ActivityThread.java:5221)
[AndroidRuntime] at java.lang.reflect.Method.invoke(Native Method)
[AndroidRuntime] at java.lang.reflect.Method.invoke(Method.java:372)
[AndroidRuntime] at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
[AndroidRuntime] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
有人知道为什么没有创建 TextView 吗?什么是问题。我在这个 activity 中有很多片段,但没有一个在使用菜单。如果我创建单个图标,例如搜索,一切正常。图标已正确创建并且 onclick 已得到妥善处理。仅当菜单项未显示为操作时才会出现问题
@编辑
我的工具栏 axml 是:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary">
<ImageView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="end"
android:scaleType="fitEnd"
android:src="@drawable/side" />
</android.support.v7.widget.Toolbar>
我遇到了同样的问题大约 2 个小时。然后在尝试了一切之后我决定 "Clean All" 项目。在我这样做之后,一切都像一个魅力。我在项目中更改并可能有所帮助的另一件事是用 Support.v4 替换所有正常的 Fragment 导入。
希望对您有所帮助!
有完全相同的问题。对我来说,解决方案不是 "Build -> Clean" 项目。这没有用!
起作用的是 Surbhit Rao 对另一个堆栈溢出的回答 post:
- 单击位于 Android Studio 右上角的 Gradle 窗格
- 导航到您的项目,然后是任务 -> 构建 ->cleanBuildCache
- 右击cleanBuildCache,运行它。
- 完成后一定要 运行 -> "Run App" 以避免 运行 一遍又一遍地使用 cleanBuildCache 脚本。