如何更改preferences.xml数据库的默认名称?

3

因为一些设备存在bug,我希望使用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)。


"由于某些设备中第二个bug的存在" -- 引用,请。 - CommonsWare
@CommonsWare https://dev59.com/52gv5IYBdhLWcg3wMN0U - Dr.jacky
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())时将创建该文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接