ListPreference не сохраняется правильно - PullRequest
0 голосов
/ 27 декабря 2011

Последние пару дней я пытался заставить списки предпочтений работать с моим приложением, но безрезультатно. Я прочитал бесчисленные темы, но все еще ничего.

Имейте в виду, я все еще нахожусь в процессе обучения, очевидно, поэтому мои знания, по меньшей мере, весьма ограничены.

Я пытаюсь создать программу, которая позволяет пользователю легко изменять некоторые системные параметры в ПЗУ.

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 (пока нельзя публиковать изображения)

Большое спасибо за ваше время.

1 Ответ

0 голосов
/ 05 января 2012

Закончил исправлять это сам.Мой класс prefs и вызывающий менеджер sharedpreference использовались в одном классе prefs, поэтому он сохранялся после повторной инициации экземпляра.

Добавление

getPrefs внутри onSharedPreferenceChanged исправило его.

...