以编程方式更改标题摘要

时间:2014-07-18 17:47:20

标签: java android sharedpreferences android-preferences preferenceactivity

我有一个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 个答案:

答案 0 :(得分:1)

假设您正在扩展类PreferenceActivity,在重写onBuildHeaders方法后,在调用 LoadHeadersFromResource 之后,只需遍历传递给<的列表强> onBuildHeaders 即可。

该列表的类型为Header,可以访问摘要文本以及其他设置。

(对不起,我会提供一个代码示例,但我用C#-monodroid编写)。

答案 1 :(得分:0)

您可以通过迭代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));
}