Android 在onSaveInstanceState中使用foreach会引发nullpointerexception
我正在尝试保存活动中当前可见的所有片段的标记 所以我定义了这些:Android 在onSaveInstanceState中使用foreach会引发nullpointerexception,android,foreach,constants,fragment,Android,Foreach,Constants,Fragment,我正在尝试保存活动中当前可见的所有片段的标记 所以我定义了这些: // Fragment TAGS private final static String EDIT_COLLECTIONS_TAG = "edit collection"; public final static String EDIT_IMAGE_TAG = "edit image"; public final static String ADD_IMAGE_TAG = "add image"; // Collection o
// Fragment TAGS
private final static String EDIT_COLLECTIONS_TAG = "edit collection";
public final static String EDIT_IMAGE_TAG = "edit image";
public final static String ADD_IMAGE_TAG = "add image";
// Collection of Frag Tags
private final static String[] FRAG_TAGS = {EDIT_COLLECTIONS_TAG, EDIT_IMAGE_TAG, ADD_IMAGE_TAG};
在onSaveInstanceState(Bundle outState)
中,我做了:
for(String tag : FRAG_TAGS){
if(getFragmentManager().findFragmentByTag(tag).isVisible()){
outState.putString(tag, tag);
}
}
…但是LogCat通知我,if
行抛出空指针异常
所以不知道我为什么尝试:
if(getFragmentManager().findFragmentByTag(FRAG_TAGS[1]).isVisible()){
outState.putString(EDIT_IMAGE_TAG, EDIT_IMAGE_TAG);
}
…这起作用了
因此,访问阵列似乎没有问题。在百灵鸟上,我将数组的内容更改为实际字符串:{“EDIT\u COLLECTIONS\u TAG”、“EDIT\u IMAGE\u TAG”、“ADD\u IMAGE\u TAG”}
,但这并没有改变结果
这是怎么回事?根据Marko Lazic的输入,我发现了两个错误:
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
@Override
public void onAttachFragment(Fragment fragment) {
super.onAttachFragment(fragment);
// add attached fragment's tag to set of tags for attached fragments
AddedFragmentTagsSet.add(fragment.getTag());
// if when adding the fragment another fragment has become detached, remove its tag from the set
for(String tag : AddedFragmentTagsSet){
if(getFragmentManager().findFragmentByTag(tag).isDetached()){ // or isVisible() probably
AddedFragmentTagsSet.remove(tag);
}
Log.d(TAG, SCOPE +"contents of AddedFragmentTagsSet: " +tag);
}
}
感谢您的帮助,各位。也许您可以使用调试器一步一步地检查代码,并在运行时发现变量的值。您可能必须首先定义它们。如果找不到片段,会发生什么?它将为null,并且不能对null对象调用.isVisible()。因为每一个都是肯定有效的,所以不要为此烦恼。马尔科是这么说的。看到你硬编码索引的地方了吗?尝试对每个索引进行硬编码,找出哪个标记导致无法解析的片段。foreach工作。