2012-04-04 8 views
5

Diğer her tercihimde OnPreferenceChangeListener'ı tetikledim. Ancak, benim RingtonePreference öyle değil: super.onActivityResult aramak zorunda onActivityResultRingtonePreference onefing OnPreferenceChangeListener

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

Bunun, onActivityResult yöntemine sahip Tercih Etkinliği ile ilgili bir etkisi vardır. – LiteWait

cevap

12

bir RingtonePreference zil sesi seçici için bir Aktivite kullandığı düzeltme

2

Not olduğunu.

Bir destek PreferenceFragment (android.support.v4.preference.PreferenceFragment) bir RingtonePreference kullanıyorsanız o zaman RingtonePreference startActivityForResult çağrılırken yanlışlıkla yerine PreferenceFragment ana Aktivite kullanarak biter. Bu, onActivityResult geri bildiriminin, ana Etkinliğe de çağrıldığı anlamına gelir. Bu sorunu gidermek için en kolay çözüm, üst etkinlikte onActivityResult geçersiz kılmayı ve geri arama tercihini PreferenceFragment için ilettiğinden emin olmaktır. Böyle Örneğin: tercihi parçasını kullanıyorsanız

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

hala sorunuyla karşı karşıya olanlar, daha sonra tercihi içine aşağıdaki kodu ekleyin denilen almalısınız Bu onPreferenceChange yöntemin ardından

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

fragment`