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; } });
- Manejo de eventos de clic en un drawable dentro de un EditText
- ¿Cómo podemos hacer el diseño de la tabla para desplazarse en ambos sentidos (horizontal, verticalmente)
- Widget onUpdate llamado cuando se inicia la Actividad de configuración
- ¿Cómo saber cuándo el widget de la galería deja de desplazarse?
- Cómo personalizar el ancho y la altura cuando se muestra una actividad como un cuadro de diálogo
- Añadir vista personalizada al diseño xml
- Envío de datos a mi widget (pantalla de inicio)
- Efecto extraño con ImageView startAnimation en ListView
- Cómo crear un menú de barra lateral
- Android: Clonación de un drawable para hacer un StateListDrawable con filtros
- Diseño de widget Android - fondo negro predeterminado
- Dos botones de widgets de Android que llaman a la misma actividad con diferentes intenciones
- Biblioteca de vista o fragmento para componer la interfaz de usuario para tipos de datos comunes
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
- ¿Existe un acceso directo para abrir archivos de diseño (.xml) en android studio?
- Cómo reemplazar el valor en clave particular en LinkedHashMap