2011-02-19 3 views
34

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

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> 

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

ответ

32

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

Изменить ссылку на SharedPreferences от этого:

SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); 

к этому:

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); 

и посмотреть, если это делает никакой разницы.

+8

Чувак, я бы хотел купить тебе кофе. Бесконечно благодарен! –

+9

Добро пожаловать :) Пострадавший некоторое время с этим тоже, знай это чувство. Я возьму кофе и притворяюсь, что это на тебе;) –

0

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

+0

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

8

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

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

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
SharedPreferences.Editor editor = preferences.edit(); 
editor.putBoolean(PREF_NAME, YOUR_VALUE); 
editor.commit(); 
Смежные вопросы