setSummary (txt) в выпуске onSharedPreferenceChanged - PullRequest
1 голос
/ 31 марта 2011

У меня есть PreferenceScreen, определенный в XML-файле, например:

<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 и отменяет его регистрацию в onPause вмой файл .java.

Упрощенный 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 на «enable» (который на данный момент ничего не делает, но вызывает изменение), сводка обновляется так, как я этого хотел при переключении «дневников».

Сообщениев Toast IS отображается, хотя ...

Как обновить сводку моего PreferenceScreen при проверке «дневных ящиков»?

1 Ответ

3 голосов
/ 31 марта 2011

Эта проблема возникает часто.

Вот еще несколько ответов, на которые вы можете посмотреть возможные решения.Я никогда не останавливался на решении, которое делает меня на 100% счастливым.

PreferenceScreen android: сводное обновление!

Обновление существующего элемента Preference в PreferenceActivity по возвращении из (под) PreferenceScreen

Из всех «решений», которые я видел, лучше всего работает вызов метода onContentChanged () после вызова setSummary (...).Есть некоторые дебаты относительно того, безопасно ли это делать.

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
        String key) {
    if (key.startsWith("chk")) {            
        PreferenceScreen prefscreen = ((PreferenceScreen)findPreference("daysOfWeek"));
        prefscreen.setSummary(key);
        onContentChanged();
    }
}
...