Настройки Android: сохранение в Activity или PreferenceActivity - PullRequest
0 голосов
/ 09 августа 2011

У меня есть Activity, который при нажатии на меню и появившейся там кнопке переходит к PreferenceActivity, а затем загружает три ListPreferences.ListPreference позволяет пользователю выбрать несколько значений для обновления удаленной БД, и я хотел бы сохранить эти значения, например, когда приложение будет приостановлено.

Поскольку ListPreference находятся в PreferenceActivityкак я могу получить эти значения?Где мне сохранить текущее состояние настроек, в Activity или в PreferenceActivity?

Это то, что я сделал до сих пор в моем 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 ]

1 голос
/ 20 августа 2011

Ваш вопрос не очень ясен, потому что ответы уже есть на вопрос ...

  1. Данные на PreferenceActivity сохраняются автоматически

  2. Вы можете получить доступ к SharedPreferences, как это

    SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
    String value = pref.getString("name_of_my_pref", "default_value");
    
0 голосов
/ 12 августа 2011

Кажется, что не должно иметь значения, где вы пишете и читаете эти значения, если они находятся в sharedPrefs. Однако, если у вас возникли проблемы с этим, почему бы просто не вызвать PreferenceActivity с startActivityForResult () в вашей основной деятельности, а в onPause () в вашей PreferenceActivity просто передать информацию в связку / намерение с помощью intent.putExtras () и отправить ее обратно к вашей основной деятельности с setResult (), finish ()? Затем делайте с ними все, что хотите, в своей основной деятельности, вытягивая данные с помощью intent.getExtras ()? Извините, если я пропустил именно то, что вы спрашивали, но это не очень понятно.

...