Подтвердить что ты не робот

Android: настройка настроек программно

У меня есть небольшой ap с предпочтениями. В этом классе я установил onPreferenceClick для получения координат от GPS. Когда слушатель возвращается, я надеюсь, что он будет автоматически устанавливать lat/long textedits. Я пробовал каждый исходный образец там, не повезло:

public void onLocationChanged(Location l) {
  Log.d("H","Location Received: "+l.toString());
  prefLocation.setSummary(l.toString());
  SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
  SharedPreferences.Editor editor1 = settings.edit();
  editor1.putString("posLat","xxx");
  editor1.commit();
}

Когда этот код выполняется, когда я нажимаю на свой PreferenceScreen, и возвращается получатель местоположения, EditTextPreference с ключом "posLat" все еще показывает старое значение.

Я схожу с ума, пытаясь понять, что случилось!

Мой prefs.xml:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:key="My_Shared_Preferences">
    <PreferenceCategory
        android:title="Your Location">
        <PreferenceScreen
            android:title="Find Location..."
            android:key="location"
            android:summary="Click here to read your location automatically"/>
        <EditTextPreference
            android:title="Latitude" 
            android:key="posLat" />
        <EditTextPreference
            android:title="Longtitude" 
            android:key="posLong" />
        <EditTextPreference
            android:title="Altitude" 
            android:key="posAlt" />
    </PreferenceCategory>
</PreferenceScreen>

В качестве альтернативы, может быть, есть лучший способ сохранить значение местоположения для приложения? Я не хочу, чтобы пользователь вручную вводил координаты, но я не хочу прибегать к сохранению и загрузке текстового файла с настройками, он кажется таким грубым.

4b9b3361

Ответ 1

У меня была одна и та же проблема. Мое решение состояло в том, чтобы использовать общие предпочтения по умолчанию вместо созданных вручную настроек с заданным именем.

Измените ссылку на SharedPreferences следующим образом:

SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);

:

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);

и посмотрите, не имеет значения.

Ответ 2

Кажется, что это действительно изменилось (см. 1 и 2)

Новый способ сделать это -

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean(PREF_NAME, YOUR_VALUE);
editor.commit();

Ответ 3

Что такое "старое значение". С кодом, который вы опубликовали, похоже, что единственное, что будет храниться в ваших предпочтениях, - это строка "xxx", которую вам нужно заменить на строку, представляющую местоположение внутри вашего метода putString().