Как изменить имя по умолчанию для базы данных preferences.xml?

Я хочу использовать 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).


person Dr.jacky    schedule 10.11.2012    source источник
comment
из-за какой-то ошибки в секундах на некоторых устройствах - цитата, пожалуйста.   -  person CommonsWare    schedule 10.11.2012
comment
@CommonsWare stackoverflow.com/questions/10786172/   -  person Dr.jacky    schedule 10.11.2012


Ответы (1)


Чтобы установить имя общего предпочтения в 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()).

person Dr.jacky    schedule 23.07.2014