我最近学习了关于使用共享首选项和PreferenceFragment
来处理应用程序首选项的部分,在Android开发者文档中,并制作了以下简单示例:
SettingsActivity.java
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()
}
}
SettingsFragment.java
public class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
}
}
res/xml/settings.xml
<?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
对话框时,我发现我的更改已经保存。
但是...当我关闭活动(或应用程序)并返回设置时,默认值又回来了,没有进行任何更改!我该怎么做才能永久保存我的设置?