Вопрос по android, android-widget – RingtonePreference не запускается OnPreferenceChangeListener

5

Любое другое предпочтение, которое у меня есть, запускает свой OnPreferenceChangeListener. Тем не менее, мой RingtonePreference не содержит:

<code>p = getPreferenceScreen().findPreference("pref_tone");
String rname = preferences.getString("pref_tone",Settings.System.DEFAULT_RINGTONE_URI.toString());
String name = ringtoneToName(rname);
p.setSummary(name);
p.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference, Object newValue) {
    // Never hits here!
    String v = (String) newValue;
    preference.setSummary(ringtoneToName(v));           
    return true;
}
});
</code>
Это как-то связано с Preference Activity, имеющим метод onActivityResult. LiteWait

Ваш Ответ

3   ответа
0

кто все еще сталкивается с проблемой, если вы используете фрагмент предпочтения, добавьте следующий код в фрагмент предпочтения`

findPreference(getString(R.string.notification_key)).setOnPreferenceChangeListener(this);

@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {

    if (preference.getKey().equals(getString(R.string.notification_key))) {

        Ringtone ringtone = RingtoneManager.getRingtone(getActivity(), Uri.parse(newVal.toString()));
        String name = ringtone.getTitle(getActivity());
        preference.setSummary(name);
    }

    return false;
}

 @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode,resultCode,data);
    }

После этого ваш метод onPreferenceChange должен быть вызван

2

что RingtonePreference использует Activity для средства выбора мелодии звонка.

Если вы используете RingtonePreference в поддержке PreferenceFragment (android.support.v4.preference.PreferenceFragment), тогда RingtonePreference заканчивается ошибочно, используя родительский Activity вместо PreferenceFragment при вызовеstartActivityForResult, Это означает, чтоonActivityResult callback также вызывается для родительского Activity. Самый простой способ решить эту проблему - переопределитьonActivityResult в родительском Activity и убедитесь, что он перенаправляет обратный вызов в PreferenceFragment. Например, вот так:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    Fragment f = getSupportFragmentManager().findFragmentByTag(PREFERENCE_FRAGMENT_TAG);
    if (f != null) {
        f.onActivityResult(requestCode, resultCode, data);
    }
}
11

ть

Похожие вопросы