RingtonePreference没有发射OnPreferenceChangeListener(R

2019-06-23 09:09发布

每隔偏好我有触发其OnPreferenceChangeListener。 然而,我的RingtonePreference它没有:

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;
}
});

Answer 1:

onActivityResult只好打电话super.onActivityResult是修复



Answer 2:

请注意,RingtonePreference使用的铃声选择器的活动。

如果你在一个支持PreferenceFragment(使用RingtonePreference android.support.v4.preference.PreferenceFragment ),那么RingtonePreference结束调用时错误地使用父活动,而不是PreferenceFragment的startActivityForResult 。 这意味着onActivityResult回调函数被调用父活性。 要解决这个问题,最简单的解决方法是重写onActivityResult父活动,并确保其转发回调到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);
    }
}


Answer 3:

这些谁仍然面临的问题,如果您使用的偏好片段然后添加偏好fragment`内将以下代码

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方法应该被调用



文章来源: RingtonePreference not firing OnPreferenceChangeListener