刷新android PreferenceFragment

问题描述 投票:12回答:2

我有一个 CheckBoxPreference 在...中 FragmentPreference. 当用户激活该复选框时,我检查是否安装了应用程序,如果没有,我将首选项重置为false,然后我打开了 游戏商店 来下载应用。

基本上所有的工作都很好,但我有一个问题,刷新用户界面。事实上,即使我在打开应用程序之前将偏好设置为false,也无法刷新用户界面。游戏商店当用户回来时,该框被选中(该片段刚刚被暂停和恢复,所以偏好值被忽略)。

有什么方法可以 "刷新 "活动或片段?

android android-fragments android-preferences
2个回答
19
投票

使你的PreferenceFragment实现了以下功能 OnSharedPreferenceChangeListener(共享偏好变更监听器) 介面。

onCreate()您可以读取偏好值,并对UI进行相应的设置。 比如说

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Load the preferences from an XML resource.
    addPreferencesFromResource(R.xml.shakesql_app_prefs);

    // Initialize pref summary label.

    // Get a reference to the application default shared preferences.
    SharedPreferences sp = getPreferenceScreen().getSharedPreferences();

    // Read the current preference value.
    String listVal =
            sp.getString(getString(R.string.preference_font_size_key),
                    getString(R.string.preference_font_size_default));

    // Look up the textual description corresponding to the
    // preference value and write it into the summary field.
    String listDesc = descriptionFromPref(
            listVal, 
            getResources().getStringArray(
                    R.array.preference_font_size_values), 
                    getResources().getStringArray(
                            R.array.preference_font_size_labels)
                    );
    if (!TextUtils.isEmpty(listDesc)) {
        ListPreference listPref =
                (ListPreference) findPreference(getString(R.string.preference_font_size_key));
        listPref.setSummary(listDesc);
    }
}

然后,在 onSharedPreferenceChanged(),更新UI。

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    Preference pref = findPreference(key);
    if (pref instanceof ListPreference) {
        // Update display title
        // Write the description for the newly selected preference 
        // in the summary field.
        ListPreference listPref = (ListPreference) pref;
        CharSequence listDesc = listPref.getEntry();
        if (!TextUtils.isEmpty(listDesc)) {
            pref.setSummary(listDesc);
        }
    }        
}

这里是API Demos中AdvancedPreferences示例中的一段代码,用于强制执行一个复选框的偏好值。

// Toggle the value of mCheckBoxPreference.
if (mCheckBoxPreference != null) {
            mCheckBoxPreference.setChecked(!mCheckBoxPreference.isChecked());
}
© www.soinside.com 2019 - 2024. All rights reserved.