Quiero forzar la vista de recursos de diseño principal para volver a dibujar / actualizar, por ejemplo, en el método Activity.onResume (). Cómo puedo hacer esto ?
Por vista de diseño principal, me refiero a la ('R.layout.mainscreen' a continuación) que se llama en mi Activity.onCreate (), así:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainscreen);
}
Respuestas:
Para responder estrictamente la pregunta: Use invalidate ():
Ahora, cuando se reanuda la Actividad, hace que cada Vista se dibuje sola. No se necesita una llamada para invalidar (). Para aplicar el tema, asegúrese de hacerlo antes de dibujar cualquier Vista, es decir, antes
setContentView(R.layout.mainscreen);
La referencia de documentación API está aquí: http://developer.android.com/reference/android/view/ContextThemeWrapper.html#setTheme%28int%29
Dado que el método onDraw () funciona en vistas ya instanciadas, setTheme no funcionará. No tengo experiencia con temas, pero dos opciones alternativas que puedo pensar son:
fuente
Tratar
getWindow().getDecorView().findViewById(android.R.id.content).invalidate();
fuente
Pruébelo
recreate()
hará que esta actividad se vuelva a crear.fuente
onResume
método? Esto me da un bucle infinito: /Solución:
Chicos, probé todas sus soluciones, pero no funcionaron para mí, tengo que establecer setVisibility of EditText en VISIBLE y este EditText debería estar visible en ScrollView , pero no pude actualizar la vista raíz para que surta efecto. Resolví mi problema, cuando necesito actualizar la vista, así que cambié la visibilidad de ScrollView a GONE y luego la configuré de nuevo en VISIBLE para que surta efecto y funcionó para mí. Esta no es la solución exacta, pero solo funcionó.
fuente
Llamar
invalidate()
opostInvalidate()
en el diseño raíz aparentemente NO garantiza que las vistas de los niños se redibujarán. En mi caso específico, mi diseño raíz era un TableLayout y tenía varios hijos de la clase TableRow y TextView. Las llamadaspostInvalidate()
, orequestLayout()
inclusoforceLayout()
en el objeto TableLayout raíz no causaron que se volvieran a dibujar las TextViews en el diseño.Entonces, lo que terminé haciendo fue analizar recursivamente el diseño buscando esas TextViews y luego invocar
postInvalidate()
cada uno de esos objetos TextView.El código se puede encontrar en GitHub: https://github.com/jkincali/Android-LinearLayout-Parser
fuente
De lo contrario, puedes probar esto también:
fuente
Simplemente configure su vista de contenido en un resumen
setContentView (R.layout.yourview) dentro de onResume ..
Ejemplo:
fuente
Pruebe esta solución alternativa para el problema de tema:
fuente
Esto le permite recargar con cambios de tema y oculta las animaciones.
fuente
También tenía este problema, pero siguiendo el ejemplo de Farhan de usar
setContentView()
, hice exactamente eso.setContentView()
Sin embargo, el uso por sí solo no era suficiente. Descubrí que tenía que repoblar todas mis opiniones con información. Para solucionar esto, simplemente extraje todo ese código a otro método (lo llamé compilación) y en mionCreate
método simplemente llamo a esa compilación. Ahora, cada vez que ocurre mi evento que quiero que mi actividad se "actualice", simplemente llamo a build, le doy la nueva información (que paso como parámetros para compilar) y tengo una actividad actualizada.fuente
Esto parece ser un error conocido .
fuente
No sé si esto es seguro o no, pero funcionó para mí. Yo un poco encontré con este problema y traté
invalidate()
yrequestLayout()
pero fue en vano. Así que llamé a mionCreate(null)
nuevo y funcionó. Si esto no es seguro, hágamelo saber. Espero que esto ayude a alguien por ahí.fuente
Así es como solía actualizar mi diseño
fuente
Para borrar una vista que extiende ViewGroup, solo necesita usar el método
removeAllViews()
Así (si tiene un ViewGroup llamado
myElement
):fuente
Prueba esto
fuente
No estoy seguro de si es un buen enfoque, pero solo lo llamo cada vez:
fuente
Simplemente llame a la actividad nuevamente utilizando la intención. Por ejemplo, para actualizar el diseño de MainActivity, haga lo siguiente:
fuente