Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:以编程方式设置首选项_Android - Fatal编程技术网

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

Android:以编程方式设置首选项,android,Android,我有一个带有偏好的小ap。在这个类中,我设置了onPreferenceClick以从GPS获取坐标。当侦听器返回时,我希望自动设置lat/long文本编辑。我已经尝试了所有的源样本,没有运气: public void onLocationChanged(Location l) { Log.d("H","Location Received: "+l.toString()); prefLocation.setSummary(l.toString()); SharedPreferences

我有一个带有偏好的小ap。在这个类中,我设置了onPreferenceClick以从GPS获取坐标。当侦听器返回时,我希望自动设置lat/long文本编辑。我已经尝试了所有的源样本,没有运气:

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并返回location listener时执行此代码时,带有键“posLat”的EditTextPreference仍然显示旧值

我想弄清楚到底出了什么问题,快发疯了

My 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>


或者,是否有更好的方法存储应用程序的位置值?我真的不想让用户手动输入坐标,但我不想用设置保存和加载文本文件,它看起来太粗糙了。

什么是“旧值”。对于您发布的代码,您的首选项中似乎只会存储字符串“xxx”,您需要将其替换为表示putString()方法内部位置的字符串。

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

从以下位置更改对SharedReferences的引用:

SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
为此:

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);

看看这是否有什么不同。

似乎这实际上已经改变了(参见和)

新的方法是

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

旧值是我在运行应用程序时在首选项屏幕上手动输入的任意数字。我希望此值更改为xxx。我不清楚你说的“用表示putString()方法中位置的字符串替换它”是什么意思。谢谢你的回答。老兄,我真希望能给你买杯咖啡。万分感谢!不客气:)我也曾为那件事挣扎过一段时间,知道那种感觉。我要喝杯咖啡,假装是你的;)即使在这之后,总结也不会更新。为什么?