设置从代码检查的菜单项

我有一个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> 

并且随着应用程序状态的改变,我希望能够用下面的代码预先检查上次使用的sorting选项列表中的哪个项目:

 ((MenuItem)findViewById(R.id.sort_by_name)).setChecked(true); 

问题是这个特定的行给我一个运行时exception。 有没有人有线索为什么?

查看日志显示运行时exception是由空指针exception触发的。 通过这种方式更改代码:

 MenuItem mi = (MenuItem)findViewById(R.id.sort_by_name); mi.setChecked(true); 

变得清楚的是在秒语句中发生exception,即MenuItem mi为空。 那么为什么第一个语句失败将一个指针指向正确的MenuItem呢?

Solutions Collecting From Web of "设置从代码检查的菜单项"

你不能做一个菜单findViewById() ,因为它是一个菜单,而不是一个视图。 而且您可以在创build或准备时更改菜单状态。 例如,如果您创build一个选项菜单,您可以在Activity: onPrepareOptionsMenu()方法中执行此操作:

 @Override public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); menu.findItem(R.id.sort_by_name).setChecked(true); //Also you can do this for sub menu menu.getItem(firstItemIndex).getSubMenu().getItem(subItemIndex).setChecked(true); return true; }