Java-Android SharedPreferences / PreferenceFragment无法正常工作
作者:互联网
我最近研究了Android开发人员文档中有关使用共享首选项处理应用程序首选项和PreferenceFragment的部分,并制作了以下简单示例:
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”,然后按OK.现在,据我了解的文档,首选项应该自动保存到共享首选项中.当我重新打开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的文档所述:
This attribute is required for preferences that persist a data value. It specifies the unique key (a string) the system uses when saving this setting’s value in the SharedPreferences.
您的pref_key_apiBaseUri似乎是一个空字符串.将其更改为有效的String并移至strings.xml:
<string name="pref_key_apiBaseUri">KEY</string>
然后用作:
<EditTextPreference
android:key="@string/pref_key_apiBaseUri"
...
或保持原样,只需在id标记之前添加,这将创建id并将其用作键:
<EditTextPreference
android:key="@+id/pref_key_apiBaseUri"
...
标签:sharedpreferences,android-activity,android-preferences,java,android 来源: https://codeday.me/bug/20191030/1964077.html