Программно изменить сводку заголовка
У меня есть файл preference_headers.xml, который я использую для заполнения заголовков для моих настроек. Я хотел бы изменить сводку заголовка, чтобы отразить sharedPreference, который он содержит. Я использовал OnSharedPreferenceChangeListener для других моих фрагментов, и он отлично работает, но это фрагменты в окне настроек, поэтому я могу получить к ним доступ следующим образом...
SharedPreferences sp = getPreferenceScreen().getSharedPreferences();
EditTextPreference editTextPref = (EditTextPreference) findPreference("pref_text");
editTextPref
.setSummary(sp.getString("pref_text", "Set an email address"));
Однако я хочу отредактировать сводку в файле preference_headers, который предназначен для другого действия, поэтому я не использую экран предпочтений для хранения общего предпочтения.
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android" >
<header
android:key="snooze_pref"
android:summary="Default snooze is 10 minutes"
android:title="Snooze Timer" >
<intent
android:action="android.intent.action.VIEW"
android:targetClass="com.example.alarmvoltageservicev2.SnoozePicker"
android:targetPackage="com.example.alarmvoltageservicev2" />
</header>
Таким образом, мой вопрос, как я могу изменить резюме заголовка выше программно?
2 ответа
Предполагая, что вы расширяете класс PreferenceActivity, в переопределении метода onBuildHeaders после вызова LoadHeadersFromResource просто выполните итерацию по "целевому" списку, который передается в onBuildHeaders.
Список имеет тип заголовка, который обеспечивает доступ к сводному тексту, а также к другим настройкам.
(Извините, я приведу пример кода, но я пишу на C#-monodroid).
Вы можете изменить резюме программно, когда вы установите ListAdapter
перебирая Headers
:
@Override
public void setListAdapter(ListAdapter adapter)
{
int i, count;
if (preferenceHeaders == null)
{
preferenceHeaders = new ArrayList<Header>();
count = adapter.getCount();
for (i = 0; i < count; ++i)
{
Header h = (Header) adapter.getItem(i);
if(h.id == R.id.SOME_HEADER_ID_FROM_XML)
{
h.summary = "<new summary at runtime>";
}
}
}
super.setListAdapter(new PreferencesHeaderAdapter(this, preferenceHeaders));
}