2011-06-17 14 views
15

Estoy tratando de forzar PreferenceActivity para actualizar. ¿Alguien sabe como hacer esto?refrescantes vistas de Preferencias al usar PreferenceActivity

Tengo una clase ResetDefaultsPreference que tiene subclases Preference y, cuando hace clic, se supone que restablece a valores predeterminados todas las preferencias cuyas teclas comienzan con un cierto prefijo. Funciona, pero cuando pulso la preferencia de reinicio, ninguna de las preferencias en esa pantalla se actualiza hasta que salgo de la pantalla y regreso. (Eso funciona para algunas preferencias de color personalizadas, pero incluso eso no funciona para algunos ListPreference s - para aquellos que tengo que salir y volver a entrar en el mismo PreferenceActivity de los valores actualizados para ser mostrado)

traté de solucionar este problema haciendo que la vista raíz y invalidate() ing, pero eso no parece. trabajo. Aquí está la línea para actualizar la pantalla. Es parte de una subclase Preference que mantiene el Context con el que se creó en mContext.

((Activity)mContext).findViewById(android.R.id.content).invalidate(); 

Esto ocurre después de que los valores de preferencia hayan sido modificados y confirmados. (Los valores cambian, pero la pantalla no.) ¿Alguien sabe cómo puedo forzar que la actividad de preferencia se actualice?

+0

el código fuente completo de la clase, para aquellos interesados, está disponible [aquí] (http://pastebin.com/ZHmSThUH). – tmandry

+1

Encontré un truco que funciona parcialmente: después de restablecer los valores predeterminados, llame a 'setSummary (getSummary() +" ");' o algo así desde 'Preference' para cambiar el resumen de la preferencia, lo que hace que la vista se actualice. Esto funciona para las preferencias de color personalizadas, pero _no_ actualiza los valores en los cuadros de diálogo 'ListPreference'. – tmandry

+0

¿Intentó 'notifyChanged()' y 'notifyHierarchyChanged()' de la 'Preferencia'? – Stan

Respuesta

13

No conozco una manera de "actualizar" la actividad de preferencia, pero puede crear la ilusión para el usuario. Se cerrará y volverá a abrir la actividad sin animaciones, por lo que aparecerá como si el valor simplemente cambiara.

Intent intent = getIntent(); 
overridePendingTransition(0, 0); 
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
finish(); 
overridePendingTransition(0, 0); 
startActivity(intent); 
+0

Justo lo que estaba buscando. ¡Muchas gracias! – Sobo

+0

¡Una excelente solución, gracias! – tristan2468

Cuestiones relacionadas