3

チェックボックスの設定が保存されない、または正しく読み取られない理由がわかりません。AndroidManifest.xmlに次のコードがあります。

<activity android:name=".Preferences" />

そして、res / xml/preferences.xmlにあります

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
<PreferenceCategory 
    android:title="Preferences">
   <CheckBoxPreference 
       android:title="Always Run"
       android:key="@string/pref_always_run_key" 
       android:summary="Always run it" />
</PreferenceCategory>

そしてres/values/strings.xmlで

<string name="pref_always_run_key">always_run_default</string>

そして、src / com.name/Preferences.javaファイルがあります

public class Preferences extends PreferenceActivity
{
private static final String LOG_TAG = Preferences.class.getSimpleName() + "_LOG";

@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferences); //5

    //getPreferenceManager().setSharedPreferencesName();

    CheckBoxPreference alwaysRunCheckBox = (CheckBoxPreference)findPreference(getString(R.string.pref_always_run_key));// 8

    alwaysRunCheckBox.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener()
    {

        @Override
        public boolean onPreferenceChange(Preference preference, Object newValue)
        {

            Log.d(LOG_TAG, "User set always run to " + newValue.toString().equals("true"));
            return true;
        }
    });
}
}

そして、MainActivity.javaのテストボタンにあります

SharedPreferences prefs = MainActivity.this.getSharedPreferences("com.projname.Preferences", Context.MODE_PRIVATE);
            String defaultAlwaysRunKey = MainActivity.this.getResources().getString(R.string.pref_always_run_key);
            Log.d(LOG_TAG, "Always run key is " + defaultAlwaysRunKey);
            boolean run = prefs.getBoolean(defaultAlwaysRunKey, false);
                            Log.d(LOG_TAG, "It contains the key: " + prefs.contains(defaultAlwaysRunKey));
            Log.d(LOG_TAG, "Always run set to " + run);
Log.d(LOG_TAG, "All the preferences saved are: " + prefs.getAll().toString());

そして、出力は常に次のとおりです。

10-25 16:15:50.844: D/MainActivity_LOG(1219): Clicked on test...
10-25 16:15:50.844: D/MainActivity_LOG(1219): Always run key is always_run_default
10-25 16:15:50.844: D/MainActivity_LOG(1219): It contains the key: false
10-25 16:15:50.844: D/MainActivity_LOG(1219): Always run set to false
10-25 16:15:50.855: D/MainActivity_LOG(1219): All the preferences saved are: {}

チェックボックスがオンになっているかどうかに関係なく。

4

2 に答える 2

4

commit();SharedPreferenceのエディターを使用して、エディターオブジェクトのメソッドを呼び出すのを忘れました。

CheckBoxPreference alwaysRunCheckBox = (CheckBoxPreference)findPreference(getString(R.string.pref_always_run_key));// 8

    alwaysRunCheckBox.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener()
    {

        @Override
        public boolean onPreferenceChange(Preference preference, Object newValue)
        {

            boolean val = Boolean.parseBoolean(newValue.toString());

            Editor e = preference.getEditor();
            e.putBoolean(getString(R.string.pref_always_run_key), val );
            e.commit();
            Log.d(LOG_TAG, "User set always run to " + String.valueOf(val));

            return true;

        }
    });
于 2012-12-23T20:45:27.300 に答える
4

あなたの問題は、あなたが書いたものとは異なる設定ファイルから読んだことだと思います。名前で読み取りますが、デフォルトで書き込みます。

MainActivityの割り当てを次のように変更してみてください

SharedPreferences prefs =
   PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
于 2012-12-30T19:49:28.533 に答える