Android:以编程方式设置首选项

时间:2011-02-19 15:49:46

标签: 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并且位置监听器返回时执行此代码时,带有“posLat”键的EditTextPreference仍会显示旧值。

我疯狂地想弄清楚什么是错的!

我的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>

或者,也许有更好的方法来存储应用程序的位置值?我真的不希望用户手动输入坐标,但我不想求助于保存和加载带有设置的文本文件,它看起来很粗糙。

3 个答案:

答案 0 :(得分:34)

我遇到了同样的问题。我的解决方案是使用默认的共享首选项,而不是手动创建的具有给定名称的首选项。

从此更改对SharedPreferences的引用:

SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);

到此:

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);

并查看是否有任何区别。

答案 1 :(得分:8)

似乎实际发生了变化(请参阅12

执行此操作的新方法是

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

答案 2 :(得分:0)

什么是“旧价值”。使用您发布的代码,看起来唯一会存储在您的首选项中的是字符串“xxx”,您需要用表示putString()方法内部位置的字符串替换它。