【发布时间】:2021-01-25 06:03:33
【问题描述】:
我正在尝试使最后一个 MenuItem 在抽屉菜单中不可见。尽管 Stackoverflow 上有 existing solutions,但我得到一个空指针异常并且不明白。
navdrawer_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/faq_id"
android:icon="@drawable/contact_support_24px"
android:title="@string/frequently_asked_questions" />
<item
android:id="@+id/support_id"
android:icon="@drawable/email_24px"
android:title="@string/support_suggestions" />
<item
android:id="@+id/news_twitter_id"
android:icon="@drawable/twitter"
android:title="@string/news_twitter" />
<item
android:id="@+id/news_facebook_id"
android:icon="@drawable/facebook_24px"
android:title="@string/news_facebook" />
<item
android:id="@+id/signout_id"
android:icon="@drawable/logout"
android:title="@string/sign_out" />
</menu>
活动布局:
<layout>
<androidx.drawerlayout.widget.DrawerLayout
<LinearLayout
<fragment/>
</LinearLayout>
<com.google.android.material.navigation.NavigationView
android:id="@+id/navViewVpn"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/nav_header"
app:menu="@menu/navdrawer_menu" />
</androidx.drawerlayout.widget.DrawerLayout>
</layout>
活动代码:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val navView: NavigationView = findViewById(R.id.navViewVpn)
val i = navView.headerCount // 1
val header: View = navView.getHeaderView(0)
val signout: MenuItem = header.findViewById(R.id.signout_id) // Crash
}
崩溃在最后一行,它甚至找不到标题下的signout_id。但为什么呢?
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.company.App.vpn.android, PID: 12008
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.company.App.vpn.android/com.company.App.vpn.android.VpnActivity}: java.lang.NullPointerException: header.findViewById(R.id.signout_id) must not be null
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException: header.findViewById(R.id.signout_id) must not be null
【问题讨论】: