Как установить значение RingtonePreference из кода?

У меня следующие предпочтения:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
   <RingtonePreference
    android:showDefault="true"
    android:showSilent="true"
    android:title="@string/feed_alert_ringtone"
    android:ringtoneType="ringtone|notification|alarm|all"
    android:key="alertringtone"
    android:persistent="false">
   </RingtonePreference>     
</PreferenceScreen>

Когда пользователь изменяет это предпочтение, я вручную сохраняю Uri в базе данных:

public boolean onPreferenceChange(Preference pref, Object change) {
    String ringtone = change.toString();

    // save it to a db
    ...

    return true;
}

Моя проблема в том, когда пользователь закрывается, а затем возвращается к PreferenceScreen , значение по умолчанию для RingtonePreference всегда равно Silence . Конечно, мне нужно установить значение вручную.

Пробовал это в моем PreferenceActivity :

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.settings); // the XML above

    String database_ringtone = ... // get the string saved above from db
                                   // and according to some parameters passed
                                   // to the intent

    Preference ringtone = findPreference("alertringtone");
    ringtone.setDefaultValue( database_ringtone );

    // also tried:
    ringtone.setDefaultValue( Uri.parse(database_ringtone) );
}

К сожалению, предпочтение остается на «Тишина» (что означает пустое). Я думал, что когда Предпочтение не постоянный будет использоваться значение по умолчанию.

Я не могу сделать его постоянным , потому что предпочтение используется для нескольких элементов, и данные, которые я получаю из БД, меняются в соответствии с заказ на некоторые дополнительные данные, переданные намерению.

Тем не менее, я хочу устанавливать не значение по умолчанию, а текущее значение, которое я получаю из базы данных. Думал, что это может быть обходной путь. Так что любой другой способ тоже подойдет.

Двойная проверка: сохранение и извлечение из БД работают, так что проблема не в этом.

Как мне установить значение RingtonePreference из кода?


Изменить: вот небольшое объяснение того, что я хочу сделать, может быть, есть другой способ.

У меня есть несколько пунктов меню (количество варьируется от пользователя к пользователю), для которых пользователь может выбрать мелодию звонка.Выбор мелодии звонка работает с xml выше, идентификатор записи меню передается с Intent в PreferenceActivity . Затем URI рингтона сохраняется в базе данных.

При изменении одной из записей воспроизводится сигнал будильника в соответствии с выбранной пользователем мелодией звонка. Итак, он знает, какой из них изменился. Пока проблем нет.

Проблема в том, что пользователь хочет изменить мелодию звонка для записи, для которой он уже определен. Если пользователь выбрал рингтон Foo раньше, при нажатии на RingtonePreference , рингтон Foo должен быть уже выбран заранее. Это не серьезная ошибка (скорее глюк), но все же очень раздражает.

Насколько я могу судить, невозможно предварительно выбрать значение по умолчанию RingtonePreference из кода? Или я делаю это «просто неправильно»?


Правка 2: Хорошо, я думаю, что нет способа сделать это. Очень странно, ядро ​​андроида. Позволяет нам использовать предпочтение и получать из него значения, но не вводить значения обратно. Должно быть, было очень поторопиться. Я рад, что они позволили нам проверить CheckBoxPreference из кода ...

6
задан Markus 24 May 2011 в 15:56
поделиться