Android偏好设置:保存在Activity或PreferenceActivity中

时间:2011-08-09 14:50:26

标签: android android-activity preferences lifecycle sharedpreferences

我有一个Activity,当点击菜单和出现在那里的按钮时,会转到PreferenceActivity,然后加载三个ListPreferencesListPreference允许用户选择多个值来更新远程数据库,我希望在应用程序暂停时保存这些值。

由于ListPreference位于PreferenceActivity,我怎样才能获得这些值? 我应该在ActivityPreferenceActivity

中保存当前首选项状态

这是我迄今为止在Activity.java

中所做的工作
[...]
private void updateFromPreferences() {
        Context context = getApplicationContext();
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
        callsFrequencyUpdate = Integer.parseInt(prefs.getString(Preferences.CALLS_FREQUENCY_PREF, "0"));
        smsFrequencyUpdate = Integer.parseInt(prefs.getString(Preferences.SMS_FREQUENCY_PREF, "0"));
        locationFrequencyUpdate = Integer.parseInt(prefs.getString(Preferences.LOCATION_FREQUENCY_PREF, "0"));
    }

    private void savePreferences() {
        SharedPreferences activityPreferences = getPreferences(Activity.MODE_PRIVATE);
        SharedPreferences.Editor editor = activityPreferences.edit();
        editor.putInt(Preferences.CALLS_FREQUENCY_PREF, callsFrequencyUpdate);
        editor.putInt(Preferences.SMS_FREQUENCY_PREF, smsFrequencyUpdate);
        editor.putInt(Preferences.LOCATION_FREQUENCY_PREF, locationFrequencyUpdate);
        editor.commit();
    }

    @Override
    protected void onPause() {
        super.onPause();
        savePreferences();
    }

这是我的Preferences.java文件:

public class Preferences extends PreferenceActivity  {
    public static final String CALLS_FREQUENCY_PREF = "CALLS_FREQUENCY_PREF";
    public static final String SMS_FREQUENCY_PREF = "SMS_FREQUENCY_PREF";
    public static final String LOCATION_FREQUENCY_PREF = "LOCATION_FREQUENCY_PREF";

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

提前多多感谢!

2 个答案:

答案 0 :(得分:1)

你的提问不是很清楚,因为答案已经在问题中......

  1. PreferenceActivity上的数据会自动保存

  2. 您可以像这样访问SharedPreferences

    SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
    String value = pref.getString("name_of_my_pref", "default_value");
    

答案 1 :(得分:0)

如果它们位于sharedPrefs中,那么写入和读取这些值似乎无关紧要。但是,如果您遇到问题,为什么不在主Activity中使用startActivityForResult()调用PreferenceActivity,在PreferenceActivity中调用onPause(),只需将信息传递到使用intent.putExtras()的bundle / intent中并将其发回用setResult(),finish()到你的主Activity?然后通过使用intent.getExtras()拉取数据,在主Activity中做任何你想做的事情?对不起,如果我错过了你的要求,但不是很清楚。