組み込みの設定システムを使用して、ユーザーがいくつかの設定を指定できるセットアップ機能があります。私の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 ダイアログの下で正しい値が選択されています!