我想使用getSharedPreference
代替getDefaultSharedPreference
(因为某些设备this中存在一些错误。)
我想倾听偏好变化。所以我做了类似的事情:
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)。
答案 0 :(得分:2)
根据this:
在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()
)时将创建该文件。