0

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 は問題なく動作します。

配列のサイズを小さくすると 1 回は機能することがありますが、設定を 2 回目に開くとすぐに StackOverflowError が再び発生します。

私が間違っている可能性があることは何ですか?同様のコードは、ApiDemos で完全にコンパイルおよび実行されます。

よろしく、ステファン。

4

1 に答える 1

-1

わかりました、どうやらこれは、実際の設定アクティビティではなく、呼び出しアクティビティの状態を保存する方法に関係していたようです。シリアル化されたオブジェクトを保存していました。これは、たとえば向きが変わったときに正常に機能しますが、新しいアクティビティを呼び出すと何らかの理由で機能しません。

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

しかたがない。はぁ

于 2012-05-11T14:36:56.277 に答える