私のコードにこのCheckBoxPreferenceがあります。私はいくつかのアクションを実行するために自分のコードでonSharedPreferenceChanged()を実装しています。問題は、チェックボックスの設定をクリックすると、同じ値のループで関数が呼び出されるということです。誰もこれで私を助けることができますか?ここでAndroid CheckBoxPreference java.lang.StackOverflowError
は、関連するコードスニペットです:好みの活動の
onSharedPreferenceChanged()セクション:
if(key.equals(LOCATION_UPDATE_KEY)) {
boolean update = sharedPreferences.getBoolean(LOCATION_UPDATE_KEY, false);
Log.v("preferences", update + "");
editor.putBoolean(LOCATION_UPDATE_KEY, update);
editor.commit();
}
好みの活動のXMLセクション:
<PreferenceCategory
android:title="Location">
<CheckBoxPreference
android:title="Track Location"
android:defaultValue="false"
android:summary="Keep track of handset location (Consumes Battery)"
android:key="track_option" />
<ListPreference
android:title="Location Update Source"
android:summary=""
android:key="track_source"
android:defaultValue="2"
android:entries="@array/location_sources"
android:entryValues="@array/location_sources_values"
android:dependency="track_option" />
<ListPreference
android:title="Location Update Interval"
android:summary=""
android:key="track_interval"
android:defaultValue="2"
android:entries="@array/location_update_interval"
android:entryValues="@array/location_update_interval_values"
android:dependency="track_option" />
</PreferenceCategory>
私はそれを手に入れません。それはeditor.commit()がループを引き起こしていることを意味しますか? – skaur
正確に。 'Editor.commit()'はあなたの 'onSharedPreferenceChanged()'をもう一度呼び出すでしょう。 – zapl
助けてくれてありがとう!ただ一つの疑問。他の場合と同じように、checkboxpreferenceの変更をコミットする必要はありませんか? (これがばかげているとお詫びしますが、最初に環境設定を使用していました) – skaur