3

我想使用getSharedPreference而不是getDefaultSharedPreference(因为某些设备中有一些错误

我想听听偏好的变化。所以我做了类似的事情:

this.getSharedPreferences("myPrefDB", MODE_PRIVATE).registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener() 
    {
        @Override
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key)
        {
            if (key.equalsIgnoreCase("myPrefKey"))
                {
                  flag = sharedPreferences.getBoolean(key,true);
                }
        }
    });

但它不起作用并且给了我错误的偏好。
甚至写这样的东西:

public class Setting extends PreferenceActivity implements OnSharedPreferenceChangeListener
{
//like above
}

又不行了。
我应该说我没有为插入值(edit()commit())写任何东西。我只是使用:

addPreferencesFromResource(R.xml.preferences);

而且我认为上面的这一行将值写入默认数据库名称(如“ com.example.something_preferences”)。但我想将值写入我的自定义名称(myPrefDB)。

4

1 回答 1

2

要在 PreferenceActivity 中设置共享首选项名称,请根据

public class SettingsActivity extends PreferenceActivity {

/*
 * (non-Javadoc)
 * 
 * @see android.preference.PreferenceActivity#onCreate(android.os.Bundle)
 */
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getPreferenceManager().setSharedPreferencesName("myPref"); 
    addPreferencesFromResource(R.xml.pref);
}

并在其他任何地方使用 SharedPreference:

SharedPreferences prf = context.getSharedPreferences("sharedpreferenceNAMEthatYOUwant", Context.MODE_PRIVATE)

如果此名称的首选项文件不存在,它将在您检索编辑器 ( SharedPreferences.edit()) 并提交更改 ( Editor.commit()) 时创建。

于 2014-07-23T14:35:44.617 回答