我有一个Android应用程序,其中一个活动中包含以下菜单项(涉及处理名称和mac编号列表):
<item android:id="@+id/menu_sort_tagg"
android:icon="@android:drawable/ic_menu_sort_by_size"
android:title="@string/menu_sort_list" >
<menu>
<group android:checkableBehavior="single">
<item android:id="@+id/sort_by_name"
android:title="@string/sort_by_name" />
<item android:id="@+id/sort_by_mac"
android:title="@string/sort_by_mac" />
</menu>
</item>
Run Code Online (Sandbox Code Playgroud)
当应用程序状态发生变化时,我希望能够使用以下代码预先检查上次使用的排序选项列表中的哪个项目:
((MenuItem)findViewById(R.id.sort_by_name)).setChecked(true);
Run Code Online (Sandbox Code Playgroud)
问题是这个特定的行给了我一个运行时异常.有没有人知道为什么?
查看日志会发现运行时异常是由空指针异常触发的.通过这种方式更改代码:
MenuItem mi = (MenuItem)findViewById(R.id.sort_by_name);
mi.setChecked(true);
Run Code Online (Sandbox Code Playgroud)
很明显,异常发生在seconds语句中,即MenuItem mi为null.那么为什么第一个语句无法将指针指向正确的MenuItem?