0

組み込みの設定システムを使用して、ユーザーがいくつかの設定を指定できるセットアップ機能があります。私のpreference.xmlはシンプルで、ListPreferenceのみです:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
  xmlns:android="http://schemas.android.com/apk/res/android" android:persistent="true">

    <PreferenceCategory android:title="Your nuSTOCK Settings" android:persistent="true">

    <ListPreference android:key="operation_section" android:entries="@array/array_nustock_section_values" android:summary="What's your operational section in nuSTOCK?" android:entryValues="@array/array_nustock_section_keys" android:title="Operation Section" android:negativeButtonText="Cancel" android:positiveButtonText="OK" android:persistent="true" android:enabled="true"/>

    </PreferenceCategory>

</PreferenceScreen>

それは私の配列を参照します:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string-array name="array_nustock_section_keys">
        <item>store</item>
        <item>branch</item>
    </string-array>
    <string-array name="array_nustock_section_values">
        <item>Store</item>
        <item>Branch</item>
    </string-array>

</resources>

そして、それ (設定モジュール) を次のようにアクティビティにロードします。

nustock_preferences = PreferenceManager.getDefaultSharedPreferences(getBaseContext());

その後、Intent を介して設定アクティビティを呼び出して、ユーザーに値を設定するように求めます (2 つのオプションのみから選択します)。

Intent settingsActivity = new Intent(this,
                    MyPreferenceActivity.class);
            startActivity(settingsActivity);

Preference アクティビティは次のようになります。

public class MyPreferenceActivity extends PreferenceActivity {



    private static final String PREF_FILENAME = "nustock_preferences";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            getPreferenceManager().setSharedPreferencesName(PREF_FILENAME);
            addPreferencesFromResource(R.xml.preferences);            

    }
}

次に、ユーザーが設定した設定値を次のように読み取ろうとします。

nustock_preferences = PreferenceManager
                .getDefaultSharedPreferences(getBaseContext());
        String op = nustock_preferences.getString(PREF_OPERATION_SECTION,"none");
        Log.d(Tag,String.format("Operation Section : %s", op));

問題:

選択した設定の値に関係なく、取得する値はデフォルトの「なし」のみです(問題を強調するために、リストの実際の値とは異なるものとして実際に追加しました-選択した値は返されません! )。

それで、私は何を間違っていますか?このアプローチのさまざまなバリエーションを試しましたが、ユーザーが選択した設定を取得できません! アプリを再起動してみました (設定が起動時に設定されることを願っていますが、何もありません!)

しかし、興味深いことに、設定画面をロードするときはいつでも、ListPreference ダイアログの下で正しい値が選択されています!

4

1 に答える 1

1

特定の設定ファイル名を指定すると思いますgetPreferenceManager().setSharedPreferencesName(PREF_FILENAME); が、後でデフォルトの設定から設定値を取得しようとしています.getDefaultSharedPreferences(getBaseContext());

これは、テーブル PERSON にデータを書き込むようなものですが、後でテーブル DEFAULT でそれを見つけようとします。

環境設定ファイル名の設定を削除するか、指定した環境設定ファイルから値を取得します

于 2012-06-21T07:57:51.950 に答える