【发布时间】:2017-06-10 05:53:49
【问题描述】:
我的目标是管理我的自定义偏好。为此,我有以下代码:
MainActivity.java
public class MainActivity extends ActionBarActivity implements View.OnTouchListener, GoogleMap.OnInfoWindowClickListener, LocationListener, GoogleMap.OnMapClickListener{
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
launchPreferences(null);
return true;
}
return super.onOptionsItemSelected(item);
}
public void launchPreferences(View view) {
Intent i = new Intent(this, Preferences.class);
startActivity(i);
}
}
Preferences.java
public class Preferences extends PreferenceActivity {
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
updatePreference();
}
settings.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:key="@+id/preferencias_principal" >
<EditTextPreference
android:key="@+id/perimer"
android:title="Perimeter to list"
android:summary="Maximum distance to list"
android:defaultValue="2"/>
<ListPreference
android:key="@+id/leguage"
android:title="Lenguage"
android:summary="What language would you apply?"
android:entries="@array/lenguage"
android:entryValues="@array/lenguageva"
android:defaultValue="1"/>
</PreferenceScreen>
arrays.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="lenguage">
<item>English</item>
<item>Basque</item>
<item>Spanish</item>
</string-array>
<string-array name="lenguageva">
<item>1</item>
<item>2</item>
<item>3</item>
</string-array>
<string-array name="number">
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
<item>7</item>
<item>8</item>
<item>9</item>
<item>10</item>
<item>11</item>
<item>12</item>
<item>13</item>
<item>14</item>
<item>15</item>
</string-array>
</resources>
我想使用以下代码获取此首选项的值:
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
Integer peri = sharedPref.getInt("@+id/perimer", 1);
Integer leng = sharedPref.getInt("@+id/leguage", 2);
但此代码返回默认值,peri=1 和 leng=2。
不仅如此,有时偏好活动添加的信息会被更改/删除,或者在 ListPreference 项中不会出现默认选择的项(如图所示)。
当我使用调试器执行可见的代码here时,结果如下:
我能做什么?
谢谢!
【问题讨论】:
-
在下面查看我的答案。希望您能理解 SharedPreferences 的正确使用。
标签: java android android-preferences