Android:如何初始化PreferenceFragment中的所有摘要

时间:2015-07-20 09:04:19

标签: android user-interface sharedpreferences android-preferences

public class SettingsActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);
    getFragmentManager().beginTransaction()
            .add(R.id.settingsContainer, new SettingsFragment())
            .commit();
}

public static class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }

    @Override
    public void onResume() {
        super.onResume();
        getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onPause() {
        super.onPause();
        getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        if (key.equals("aKey") {
            Preference pref = findPreference(key);
            pref.setSummary(sharedPreferences.getString(key, ""));
        }
    }
}
}

当用户改变他的偏好时,他们被听众存储和显示。 重新启动活动后,我丢失了所有摘要,但正确存储了值,因为如果单击每个首选项,则会检索它们。 我想展示以前做过的事情,而不是默认值。

2 个答案:

答案 0 :(得分:1)

在注册侦听器之后的onResume()方法中,只需使用每个首选项键调用侦听器。

 @Override
public void onResume() {
    super.onResume();
    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    onSharedPreferenceChanged(getPreferenceScreen().getSharedPreferences(), "your_key");
}

答案 1 :(得分:0)

创建片段时,您调用以下方法:

addPreferencesFromResource(R.xml.preferences)

如果xml文件首选项内容是静止的,则在接受onSharedPreferenceChanged时更改另一个首选项文件。 您可以使用方法getActivity().getSharedPreferences()获取值。