MenuItem中使用app:actionLayout(Switch)造成空指针异常

使用情况:

MenuItem中使用了app:actionLayout

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.example.nfcdemo.MainActivity">

    <item
        android:id="@+id/action_open_close_nfc"
        android:orderInCategory="100"
        android:title=""
        app:actionLayout="@layout/menu_switch"
        app:showAsAction="always" /> 
</menu>

menu_switch对应的布局中包含了一个Switch控件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   >
    <Switch
       android:id="@+id/switchForActionBar"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_centerInParent="true"
       android:text=""
       android:checked="false"
       android:theme="@style/ThemeOverlay.SwitchBar"
       />

</RelativeLayout>

错误原因

直接使用错误方式(findViewById)获取Switch,导致获取失败,使用时空指针异常

解决办法

使用正确的方式(menu–>menuitem–>actionview–>switch)获取Switch

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    MenuItem switchItem = menu.findItem(R.id.action_open_close_nfc);
   mSwitch = (Switch) switchItem.getActionView().findViewById(R.id.switchForActionBar);
    if (mNfcAdapter != null) {
        mSwitch.setChecked(mNfcAdapter.isEnabled());
    }
    return true;
}
    原文作者:Andorras
    原文地址: https://www.jianshu.com/p/7a376ecac438
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞