0

ここ数日、私は自分のアプリケーションで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(まだ画像を投稿できません)

お時間をいただき、誠にありがとうございます。

4

1 に答える 1

0

結局自分で直しました。私の設定クラスと共有設定マネージャーの呼び出し元が同じ設定クラスで使用されていたため、インスタンスが再起動された後に保存されていました。

追加する

onSharedPreferenceChanged 内の getPrefs で修正されました。

于 2012-01-05T10:45:18.857 に答える