Этот маленький трюк работает хорошо, я нашел много разных возможных решений этой проблемы, но только этот сработал для меня.

я естьPreferenceActivity с двухуровневым деревомPreferenceScreenс, что-то вроде:

<PreferenceScreen>
  <PreferenceScreen android:key="A">
     <ListPreference/>
     <EditTextPreference/>
  </PreferenceScreen>
  <PreferenceScreen android:key="B">
     <ListPreference/>
     <EditTextPreference/>
  </PreferenceScreen>
  ...
</PreferenceScreen>

Каждый из экранов предпочтения более низкого уровня, например, A и B, собирает две взаимосвязанные части данных. Я хочу, чтобы сводка для этих родительских элементов представляла собой комбинацию текущих значений двух вложенных предпочтений.

Я попытался добавить onPreferenceChangeListener в настройки листа и обновить сводку оттуда, но, похоже, это не сработало. Все предпочтения создаются программно в рамках действия, поэтому я делаю что-то вроде этого в onCreate:

   leafListPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
       @Override
       public boolean onPreferenceChange(Preference preference, Object newValue) {
              // do some work
              prefScreenA.setSummary( /* get new summary based on newValue */);
              return true;
       }
  });

Затем я попытался найти место, где мне сообщили бы, что я вернулся на экран настроек верхнего уровня со страницы, чтобы я мог обновить на этом этапе. Однако я не совсем понимаю, как отображаются экраны нижнего уровня. Похоже, что это на самом деле диалоги, а не полные действия, так как onPause / onResume не вызывается при перемещении между ними. Есть где-то метод, который мне не хватает, который будет вызываться при возвращении на страницу верхнего уровня?

Я также попытался добавить sharedPreferenceChangeListener, как описаноВотно это никогда не кажется

У кого-нибудь есть намеки на то, что мне здесь не хватает, или какой-то более простой подход, который мне не хватает?

Ответы на вопрос(4)

Ваш ответ на вопрос