http://blog.csdn.net/maojudong/article/details/7010210

问题的提出:

有个朋友问: 为什么下面的代码会失败,得到的是空指针异常

先看menu.xml 文件的内容

<itemandroid:id="@+id/menu_sort_tagg"  android:icon="@android:drawable/ic_menu_sort_by_size"  android:title="@string/menu_sort_list">  <menu>   <groupandroid:checkableBehavior="single">     <itemandroid:id="@+id/sort_by_name"        android:title="@string/sort_by_name"/>     <itemandroid:id="@+id/sort_by_mac"            android:title="@string/sort_by_mac"/>  </menu></item>
代码中如下处理:
((MenuItem)findViewById(R.id.sort_by_name)).setChecked(true);
或通过

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

系统都会报告空指针异常 “MenuItem mi is null”


原因:

我们不能将findViewById()用于menu ,因为他是menu,不是view. 我们可以更改menu的状态,只有它已经被创建或是被准备(created or prepared)好后才行。


解决办法:


可以使用Activity: onPrepareOptionsMenu() 等方法来处理
@OverridepublicbooleanonPrepareOptionsMenu(Menumenu){ super.onPrepareOptionsMenu(menu);  menu.findItem(R.id.sort_by_name).setChecked(true); returntrue;}

  

@Override

publicbooleanonMenuOpened(intfeatureId, Menu menu) {

//TODOAuto-generated method stub

menu.findItem(R.id.sort_by_name).setChecked(true);

returnsuper.onMenuOpened(featureId, menu);

}


或 只被初始化一次(通常这么认为),则用下面的方法

publicbooleanonCreateOptionsMenu(Menu menu) {

MenuInflater inflater =this.getMenuInflater();

inflater.inflate(R.menu.menu, menu);

 menu.findItem(R.id.sort_by_name).setChecked(true); 
}

以上三种方法之一调用。



绝对不能用findViewById()


更多相关文章

  1. android中webView JS调用Android的方法、webView的下拉刷新(Swipe
  2. Android使用代码实现关机/重启
  3. Android中Activity状态的保存和恢复:onSaveInstanceState和onRest
  4. android 连接服务器的方法及安全性问题
  5. android中Bitmap的放大和缩小的方法
  6. Android遍历文件Listfile返回值为null问题解决方法适用Android8.
  7. Android 最新获取手机内置存储大小,SD卡存储空间大小方法
  8. 【知识点】android代码中设置margin
  9. Android蓝牙通信代码

随机推荐

  1. Android handler用法详解二(例2)
  2. Android浏览器开发 WebView setBlockNetw
  3. android java.lang.IllegalStateExceptio
  4. android 各版本与api值 对应表
  5. Android - 对话框(Dialog)和通知(Notific
  6. Android之 BatteryService
  7. No 98 · Android 下载文件及写入SD卡(摘)
  8. Android 7.0使用相机功能
  9. android 让 webview 支持HTML中的
  10. Android读取联系人的姓名及号码