我一直在使用Marshmallow 6.0手机开发应用程序。今天,我用Nougat 7.0手机运行它,一切都很好。在LinearLayout中将一行xml代码('selectableItemBackground')更改为'selectableItemBackgroundBorderless'并在不相关的MenuItem上获得NPE(“尝试调用接口方法'android.view.MenuItem android.view.MenuItem.setIcon(int)'在null对象引用“)这里:
public void updateSpeakerIcon() {
if (mIsSpeakerOn) {
mSpeakerIcon.setIcon(R.drawable.speaker);
setVolumeControlStream(AudioManager.STREAM_MUSIC);
} else {
mSpeakerIcon.setIcon(R.drawable.earphone);
setVolumeControlStream(AudioManager.STREAM_VOICE_CALL);
}
}
我正在使用ViewPager;此方法在包含它的活动中声明;片段在onResume回调中调用此方法。
mCpeakerIcon在onCreateOptionsMenu回调中'找到',在同一个活动中:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.qmenu, menu);
mSpeakerIcon = menu.findItem(R.id.toggle_speaker);
return true;
}
我已经将一行改回原来的状态,但当然,它没有解决问题。再次在6.0设备中运行应用程序并且没有错误。
有什么想法吗?提前谢谢!