在过去的几天里,我一直试图在我的应用程序中使列表优先工作,但没有结果。我读过无数的线索,但还是什么也没读。
请注意,我还在学习过程中,显然,所以我的知识是相当有限的,至少可以说。
我正在尝试做一个程序,让用户可以轻松地改变一些系统参数的ROM。
public class MyPersArray extends PreferenceActivity implements OnSharedPreferenceChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pers);
getPrefs();
[....]
public String ListPreference;
private void getPrefs() {
// Get the xml/preferences.xml preferences
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
// register preference change listener
prefs.registerOnSharedPreferenceChangeListener(this);
ListPreference = prefs.getString("gpsPref", "0");
}
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if(Integer.valueOf(ListPreference) == 0) {
ListPreference = prefs.getString("gpsPref", "0");
Commands.doGps0();
Toast.makeText(getApplicationContext(), "0",Toast.LENGTH_SHORT).show();
} else if(Integer.valueOf(ListPreference) == 1) {
ListPreference = prefs.getString("gpsPref", "1");
Commands.doGps1();
Toast.makeText(getApplicationContext(), "1",Toast.LENGTH_SHORT).show();
} else if(Integer.valueOf(ListPreference) == 2) {
ListPreference = prefs.getString("gpsPref", "2");
Commands.doGps2();
Toast.makeText(getApplicationContext(), "2",Toast.LENGTH_SHORT).show();
} else if(Integer.valueOf(ListPreference) == 3) {
ListPreference = prefs.getString("gpsPref", "3");
Commands.doGps3();
Toast.makeText(getApplicationContext(), "3",Toast.LENGTH_SHORT).show();
} else if(Integer.valueOf(ListPreference) == 4) {
ListPreference = prefs.getString("gpsPref", "4");
Commands.doGps4();
Toast.makeText(getApplicationContext(), "4",Toast.LENGTH_SHORT).show();
} else if(Integer.valueOf(ListPreference) == 5) {
ListPreference = prefs.getString("gpsPref", "5");
Toast.makeText(getApplicationContext(), "5",Toast.LENGTH_SHORT).show();
Commands.doGps5();
}
}这是我为首选项使用的代码。
我的xml如下所示:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<ListPreference
android:defaultValue="0"
android:dialogTitle="Pick your Region"
android:enabled="true"
android:entries="@array/gps_entries"
android:entryValues="@array/gps_values"
android:key="gpsPref"
android:negativeButtonText="Cancel"
android:summary="Enhance GPS signal and speed"
android:title="GPS Preference" >
</ListPreference>
</PreferenceScreen>我的数组看起来是这样的:
<string-array name="gps_values">
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
</string-array>
<string-array name="gps_entries">
<item>Europe</item>
<item>Africa</item>
<item>Asia</item>
<item>Australia</item>
<item>North America</item>
<item>South America</item>
</string-array>首选项代码和getPrefs代码包含在同一个java文件中。这是我找到“起作用”的唯一方法。
的问题是,使用这段代码时,ListPreference没有得到正确的更新,并且命令没有在单击ListPreference时执行。只有当我再次点击GPS配置项时,它才会更新。。
这里有一个小截图,这样你就能更好地理解。http://i42.tinypic.com/t7bebq.png (还不能发布图片)
非常感谢你抽出时间。
发布于 2012-01-05 10:45:18
最后我自己修好了。我的prefs类和shared首选项管理器调用者都在同一个prefs类中使用,因此在重新启动实例之后保存它。
添加
getPrefs it修复了它。
https://stackoverflow.com/questions/8646774
复制相似问题