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

Hei*_*sis 36 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();
}
Run Code Online (Sandbox Code Playgroud)

当我单击我的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>
Run Code Online (Sandbox Code Playgroud)

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

Eri*_*vik 35

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

从这里更改对SharedPreferences的引用:

SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
Run Code Online (Sandbox Code Playgroud)

对此:

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
Run Code Online (Sandbox Code Playgroud)

看看是否有任何区别.

  • 欢迎你:)在这个问题上苦苦挣扎,知道这种感觉.我会喝咖啡,假装它在你身上;) (12认同)
  • 伙计,我希望我可以给你买一杯咖啡.太感谢了! (11认同)

Ale*_*cha 9

似乎这实际上发生了变化(见12)

这样做的新方法是

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean(PREF_NAME, YOUR_VALUE);
editor.commit();
Run Code Online (Sandbox Code Playgroud)