我创建了一个类似于Android ApiDemos中的PreferenceActivity。
我正在使用此代码创建活动:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.bridges_references);
//setPreferenceScreen(createPreferenceHierarchy());
}
和这个xml:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="Preferences">
<CheckBoxPreference
android:key="hasLoops"
android:defaultValue="true"
android:title="@string/title_hasLoops"
android:summary="@string/summary_hasLoops" />
<ListPreference
android:key="width"
android:defaultValue="7"
android:summary="@string/summary_width"
android:dialogTitle="@string/title_width"
android:title="@string/title_width"
android:entryValues="@array/size_values"/>
<ListPreference
android:key="height"
android:defaultValue="7"
android:summary="@string/summary_height"
android:dialogTitle="@string/title_height"
android:title="@string/title_height"
android:entryValues="@array/size_values"/>
</PreferenceCategory>
</PreferenceScreen>
当我尝试使用以下方式启动首选项活动时:
Intent intent = new Intent(activity.getApplicationContext(), BridgesPreferenceActivity.class);
activity.startActivity(intent);
我得到一个StackOverflowError:
java.lang.StackOverflowError
at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1746)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1696)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1660)
at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:1153)
at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:420)
at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1251)
at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1587)
at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1854)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1696)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1660)
at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:1153)
(太长时间才能看到实际造成它的原因;它会被切断)
只要我包含ListPreference或EditTextPreference,就会发生这种情况。 CheckBoxPreference工作正常。
当我减小数组的大小时,它有时会工作一次,但是一旦我再次打开首选项,我就会再次得到StackOverflowError。
知道我可能做错了吗?类似的代码在ApiDemos中编译并完美运行。
亲切的问候, 斯蒂芬。
答案 0 :(得分:-1)
好的,显然这与我如何保存调用Activity的状态而不是实际的首选项活动有关。我正在保存一个序列化对象,例如方向更改时可以正常工作,但在我调用新活动时不会出于某种原因。
在将我的偏好完全重写为普通活动后,我发现了这一点,但它仍然会抛出相同的错误。
好吧,好吧。 叹息