Последние пару дней я пытался заставить списки предпочтений работать с моим приложением, но безрезультатно. Я прочитал бесчисленные темы, но все еще ничего.
Имейте в виду, я все еще нахожусь в процессе обучения, очевидно, поэтому мои знания, по меньшей мере, весьма ограничены.
Я пытаюсь создать программу, которая позволяет пользователю легко изменять некоторые системные параметры в ПЗУ.
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 (пока нельзя публиковать изображения)
Большое спасибо за ваше время.