RingtonePreference метод getEntry - PullRequest
       5

RingtonePreference метод getEntry

3 голосов
/ 04 февраля 2012

Я хочу отобразить текущее выбранное значение на экране настроек в сводной метке.

Для ListPreference , я использовал getEntry метод в

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

метод, мой класс:

public class AlarmPropertiesActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener

Для EditTextPreference , я использовал getText метод

Я пытаюсь получить значение по умолчанию для RingtonePreference , но я не нашел никакого метода get для этого.

Кто-нибудь мне поможет?

BR Kolesar

Ответы [ 2 ]

8 голосов
/ 06 декабря 2012

Этот работает для меня; -)

if (pref instanceof RingtonePreference) {

            Log.i("***", "RingtonePreference " + pref.getKey());
            final RingtonePreference ringPref = (RingtonePreference) pref;
            ringPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
                @Override
                public boolean onPreferenceChange(Preference preference,
                        Object newValue) {
                    Log.i("***", "Changed " + newValue.toString());
                    Ringtone ringtone = RingtoneManager.getRingtone(
                            SettingsActivity.this, Uri.parse((String) newValue));
                    ringPref.setSummary(ringtone.getTitle(SettingsActivity.this));
                    return true;
                }
            });
            String ringtonePath=pref.getSharedPreferences().getString(pref.getKey(), "defValue");
            Ringtone ringtone = RingtoneManager.getRingtone(
                    SettingsActivity.this, Uri.parse((String) ringtonePath));
            ringPref.setSummary(ringtone.getTitle(SettingsActivity.this));

        }
2 голосов
/ 15 мая 2012

У меня такая же проблема. Попытался перейти по значению SharedPreferences, но, к сожалению, URI приводит к идентификатору, подобному именованному файлу.

private void updateSummary(Preference p, SharedPreferences sharedPrefs) {
    if (p instanceof ListPreference) {

        ListPreference listPref = (ListPreference) p;
        p.setSummary(listPref.getEntry());

    } else if (p instanceof RingtonePreference) {

        /* 
         * This is kind of a longshot, since we are not able to get the entry directly and
         * so we have to go the route via the shared preferences.
         */

        RingtonePreference ringPref = (RingtonePreference) p;
        String ringtoneKey = ringPref.getKey();
        String ringtonePath = sharedPrefs.getString(ringtoneKey, "");
        ringPref.setSummary(ringtonePath);

    }
}

Путь примерно такой: контент: // медиа / внутренний / аудио / медиа / 25

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

...