2012-05-10 15 views
0

Android ApiDemosのような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

これは明らかに、これは実際のプリファレンスアクティビティではなく、呼び出し元アクティビティの状態をどのように保存していたかとは関係があります。私はシリアル化されたオブジェクトを保存していました。たとえば、向きが変わったときなどにはうまくいきますが、新しいアクティビティを呼び出すときには何らかの理由で動作しません。

自分の設定を通常のアクティビティに完全に書き直した後にこれを見つけましたが、それでも同じエラーが発生しました。

まあまあです。 sigh

関連する問題