3

設定画面を表示するための次のコードがあります。

Button showPreferences=(Button)findViewById(R.id.buttonShowPreferences);
showPreferences.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        startActivity(new Intent(MainActivity.this, PreferencesActivity.class));
    }           
});

Button logPreferences=(Button)findViewById(R.id.buttonLogPreferences);
logPreferences.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        String editText=prefs.getString("edit_text", "default_edit_text_value");
        boolean checkBox=prefs.getBoolean("check_box", true);
        String list=prefs.getString("list", "default_list_value");

        Log.i("edit_text_value", editText);
        Log.i("check_box_value", String.valueOf(checkBox));
        Log.i("list_value", list);
    }

});

ご覧のとおり、2 番目のボタンは設定から​​値を取得するために使用されますが、問題があります。getString()、getBoolean() メソッドの 2 番目のパラメーターから常にデフォルト値を取得しています!

PreferenceActivity クラスのレイアウト:

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

    <PreferenceCategory
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:key="first_screen_key"
        android:summary="First summary"
        android:title="First title" >
        <CheckBoxPreference
            android:persistent="true"
            android:title="Check Box Title"
            android:key="check_box_key"
            android:defaultValue="false"/>
        <ListPreference 
            android:persistent="true"
            android:title="List Title"
            android:key="list_key"
            android:entries="@array/entries"
            android:defaultValue="second_value"
            android:entryValues="@array/entries_values"/>
        <EditTextPreference 
            android:persistent="true"
            android:title="Edit Text Title"
            android:key="edit_text_key"
            android:defaultValue="Edit Text Value"/>
    </PreferenceCategory>

</PreferenceScreen>
4

2 に答える 2

1

1.DDMS->File Explorer->data->data->your package->shared_prefs->*_preferences.xml で xml ファイルを確認できます。

2.「edit_text」/「check_box」/「list」を「check_box_key」/「list_key」/「edit_text_key」に置き換えます。

于 2013-02-17T09:08:48.420 に答える
0

コードの問題は、キーが設定 xml で設定されたキーに対応していないことです。たとえば、次のようになります。

String editText=prefs.getString("edit_text", "default_edit_text_value");

しかし、「edit_text」はどこですか?

xml では、キーの名前は android:key="edit_text_key" なので、"edit_text" を "edit_text_key" に置き換える必要があります。

于 2015-01-25T21:26:31.053 に答える