Этот маленький трюк работает хорошо, я нашел много разных возможных решений этой проблемы, но только этот сработал для меня.
я есть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, как описаноВотно это никогда не кажется
У кого-нибудь есть намеки на то, что мне здесь не хватает, или какой-то более простой подход, который мне не хватает?