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

我有一个喜好的小ap。 在这个类中,我设置了onPreferenceClick从GPS获取坐标。 当听者返回时,我的希望是自动设置纬度/长度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> 

或者,也许有更好的方法来存储应用程序的位置值? 我真的不希望用户手动input坐标,但我不想诉诸保存和加载与设置的文本文件,这似乎是如此粗糙。

我一直有这样的问题。 我的解决scheme是使用默认的共享首选项,而不是使用给定名称手动创build首选项。

从这里改变对SharedPreferences的引用:

 SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); 

对此:

 SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); 

看看有没有什么区别

似乎这实际上已经改变(见1和2 )

这样做的新方法是

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

什么是“旧价值”。 使用已经发布的代码,它看起来像将被存储在首选项中的唯一东西是string“xxx”,您需要用代表putString()方法内部位置的stringreplace它。