[英]Android: SharedPreferences not getting updated from PreferenceFragment
[英]Android SharedPreferences/PreferenceFragment not working
我最近研究了有關使用共享首選項處理應用程序首選項以及Android Developer Documentation中的PreferenceFragment
,並做了以下簡單示例:
public class SettingsActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState == null)
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new SettingsFragment())
.commit()
}
}
public class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
}
}
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory android:title="@string/pref_general_category">
<EditTextPreference
android:key="@id/pref_key_apiBaseUri"
android:title="@string/pref_apiBaseUri_title"
android:defaultValue="@string/pref_apiBaseUri_default"
android:persistent="true"
android:inputType="text"
android:singleLine="true" />
</PreferenceCategory>
</PreferenceScreen>
id pref_key_apiBaseUri
string pref_apiBaseUri_title "Api Base Uri"
string pref_api_baseUri_default "http://acme.com/api/
直截了當的東西,嗯? 我啟動了應用程序,轉到首選項菜單/活動, 首選項片段被充氣,我點擊了“ Api Base Uri ”。 彈出一個EditText
對話框,我將“ http://acme.com/api
”更改為“ http://acme.com/api2
”並按下確定。 現在,據我所知,文檔中,首選項應自動保存到共享首選項中 。 當我重新打開EditText
對話框時,我看到我的更改已存儲。
但是,當我關閉活動(或應用程序)並再次返回設置時,默認值又回來了,沒有進行任何更改! 如何永久保存我的設置?
在settings.xml中,您有:
<EditTextPreference
android:key="@id/pref_key_apiBaseUri"
android:title="@string/pref_apiBaseUri_title"
android:defaultValue="@string/pref_apiBaseUri_default"
android:persistent="true"
android:inputType="text"
android:singleLine="true" />
您必須為key指定一個字符串,因為android:key的文檔說:
對於保留數據值的首選項,此屬性是必需的。 它指定在SharedPreferences中保存此設置值時系統使用的唯一鍵(字符串)。
看來你的pref_key_apiBaseUri是一個空字符串。 將其更改為有效的String並移至strings.xml:
<string name="pref_key_apiBaseUri">KEY</string>
然后用作:
<EditTextPreference
android:key="@string/pref_key_apiBaseUri"
...
或者保持原樣,只需在id標簽前添加+
,這將創建id,而id又用作鍵:
<EditTextPreference
android:key="@+id/pref_key_apiBaseUri"
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.