最近幾天我一直試圖使我的應用程序的列表首選項無濟於事。我讀過無數的線索,但仍然沒有。ListPreference無法正確保存
請注意,我仍然處於學習過程中,顯然,所以我的知識是相當有限的,至少可以說。
我想製作一個程序,允許用戶輕鬆更改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(還未發佈圖片)
非常感謝您的時間。
你應該給你的變量ListPreference一個以小寫字母開頭的名字。 int值開關,第三,使用參數doGps,你的代碼將是6行而不是30. – Snicolas 2011-12-27 16:22:32
我是一個新手,因爲我說,請你給一些更多的信息? – 2011-12-27 16:49:55