Программно изменить сводку заголовка

У меня есть файл 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));
}
Другие вопросы по тегам