RingtonePreference no disparar OnPreferenceChangeListener

Cada otra preferencia que tengo tiene su OnPreferenceChangeListener. Sin embargo, mi RingtonePreference no lo hace:

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

OnActivityResult tuvo que llamar a super.onActivityResult es el arreglo

Tenga en cuenta que un RingtonePreference utiliza una actividad para el selector de tonos.

Si está usando un RingtonePreference en un PreferenceFragment de soporte ( android.support.v4.preference.PreferenceFragment ), entonces el RingtonePreference termina erróneamente utilizando la actividad principal en lugar del PreferenceFragment al llamar a startActivityForResult . Esto significa que la onActivityResult llamada onActivityResult se llama a la actividad principal. La solución más fácil para solucionar este problema es anular onActivityResult en la actividad primaria y asegurarse de que reenvía la devolución de llamada al onActivityResult PreferenceFragment. Por ejemplo:

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

Aquellos que todavía están enfrentando problema, si está utilizando el fragmento de preferencia, a continuación, agregue el código siguiente dentro del fragmento de preferencia.

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

Después de esto su método onPreferenceChange debe ser llamado

  • Cómo recuperar texto de Textbox en el widget de Android?
  • ¿Hay una manera de mostrar la barra de desplazamiento de ListView todo el tiempo?
  • ¿Hay algún sitio web que muestre todos los componentes y widgets de interfaz de usuario disponibles con código fuente?
  • Lanzar widget desde el código
  • Necesita un desplazamiento horizontal en el diseño de la tabla
  • Establecer dinámicamente el fondo del diseño lineal
  • Android EditText maxLength permite al usuario escribir más
  • Depuración del código de widgets de Android en Eclipse
  • Widget de la galería androide desplazamiento infinito
  • Vista de lista de fondo de pie de página en Android 2.3.3
  • Android.widget, textView no se puede convertir en android.widget, botón
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.