2012-05-10 52 views
0

我创建了一个类似于Android ApiDemos中PreferenceActivity的PreferenceActivity。带PreferenceActivity的StackOverflowError

我使用此代码创建活动:

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中完美运行。

亲切的问候, 斯蒂芬。

回答

-1

好的,很显然,这与我如何保存调用活动的状态而不是实际的首选项活动有关。我保存了一个序列化的对象,在例如方向改变时工作正常,但当我调用一个新的活动时没有出于某种原因。

我发现这完全重写我的喜好到一个正常的活动后,它仍然不断抛出相同的错误。

唉。 叹息