1

次のようなXMLファイルでPreferenceScreenを定義しています。

<PreferenceCategory android:title="Choose Days">
    <PreferenceScreen android:title="Days of Week" android:key="daysOfWeek">
        <CheckBoxPreference android:title="Mondays" android:key="chkMonday"></CheckBoxPreference>
        <CheckBoxPreference android:title="Tuesdays" android:key="chkTuesday"></CheckBoxPreference>
        <CheckBoxPreference android:title="Wednesdays" android:key="chkWednesday"></CheckBoxPreference>
        <CheckBoxPreference android:title="Thursdays" android:key="chkThursday"></CheckBoxPreference>
        <CheckBoxPreference android:title="Fridays" android:key="chkFriday"></CheckBoxPreference>
        <CheckBoxPreference android:title="Saturdays" android:key="chkSaturday"></CheckBoxPreference>
        <CheckBoxPreference android:title="Sundays" android:key="chkSunday"></CheckBoxPreference>
    </PreferenceScreen>
</PreferenceCategory>
<PreferenceCategory android:title="Other Settings">
    <CheckBoxPreference android:title="Enable" android:defaultValue="true" android:key="enable"></CheckBoxPreference>
</PreferenceCategory>

PreferenceScreen:daysOfWeekをクリックすると、チェックボックスが表示されます。チェックボックスをオンまたはオフにすると、onSharedPreferenceChangedがトリガーされます。

これはこれが原因です:

パブリッククラスMutenyはPreferenceActivityを拡張し、OnSharedPreferenceChangeListenerを実装します{

onResumeに登録し、.javaファイルのonPauseで登録を解除します。

簡略化されたonSharedPreferenceChangedは次のようになります。

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    PreferenceScreen daysOfWeek = ((PreferenceScreen)findPreference("daysOfWeek"));
    daysOfWeek.setSummary("text for summary");
    Toast.makeText(this.getApplicationContext(), "Hello", Toast.LENGTH_LONG).show();
}

問題は、「daysOfWeek」の要約が更新されないことです。次に、CheckBoxPreferenceを「有効」に切り替えると(現時点では何も実行されませんが、変更がトリガーされます)、「デイボックス」を切り替えたときに必要に応じて概要が更新されます。

トーストのメッセージは表示されますが...

「日ボックス」をチェックするときに、PreferenceScreenの要約を更新するにはどうすればよいですか?

4

1 に答える 1

3

この問題は頻繁に発生します。

考えられる解決策を確認できる他の回答をいくつか示します。とはいえ、100% 満足できる解決策に落ち着いたことはありません。

PreferenceScreen android:まとめ更新!

(サブ)PreferenceScreen から戻ったときに、PreferenceActivity の既存の Preference-item を更新します。

私が見たすべての「解決策」の中で、setSummary(...) 呼び出しの後に onContentChanged() を呼び出すのが最も効果的だと思われるものです。これが安全かどうかについては、いくつかの議論があります。

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
        String key) {
    if (key.startsWith("chk")) {            
        PreferenceScreen prefscreen = ((PreferenceScreen)findPreference("daysOfWeek"));
        prefscreen.setSummary(key);
        onContentChanged();
    }
}
于 2011-03-31T15:21:27.497 に答える