Cómo forzar un diseño completo ¿Ver actualizar?

Quiero forzar la vista de recursos de diseño principal para volver a dibujar / actualizar, por ejemplo el método Activity.onResume (). Cómo puedo hacer esto ?

Por la vista de diseño principal, me refiero a la ('R.layout.mainscreen' a continuación) que se llama en mi Activity.onCreate (), como este:

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mainscreen); } 

Para responder estrictamente a la pregunta: Use invalidate ():

Public void invalidate () Desde: API Nivel 1

Invalide la vista completa. Si la vista es visible, onDraw (Canvas) será llamado en algún momento en el futuro. Esto se debe llamar desde un subproceso de interfaz de usuario. Para llamar desde un hilo no de interfaz de usuario, llame a postInvalidate ().

 ViewGroup vg = findViewById (R.id.mainLayout); vg.invalidate(); 

Ahora, cuando se reanuda la Actividad, hace que cada Vista se dibuje. No se necesita ninguna llamada a invalidate (). Para aplicar el tema, asegúrese de hacerlo antes de dibujar cualquier vista, es decir, antes de setContentView(R.layout.mainscreen);

Public void setTheme (int resid) Desde: API Nivel 1

Establezca el tema base para este contexto. Tenga en cuenta que esto debería llamarse antes de que se instancien las vistas en el Contexto (por ejemplo, antes de llamar a setContentView (View) o inflar (int, ViewGroup)).

La referencia del doc del 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 yo mismo, pero dos opciones alternativas que puedo pensar son:

  1. Llamada setTheme en onCreate () en su lugar, o
  2. Redo setContentView (R.layout.mainscreen); Para obligar a reinstantiar todo el diseño.

Pruebe getWindow().getDecorView().findViewById(android.R.id.content).invalidate();

Intente recreate () hará que esta actividad sea recreada.

Solución:

Chicos He intentado todas sus soluciones, pero no funcionó para mí, tengo que establecer setVisibility de EditText a VISIBLE y este EditText debe ser visible entonces en ScrollView , pero no pude actualizar la vista de la raíz para tener efecto. He resuelto mi problema, cuando tengo que actualizar la vista, así que cambié la visibilidad de ScrollView a GONE y luego de nuevo a VISIBLE para tener efecto y funcionó para mí. Esta no es la solución exacta, pero sólo funcionó.

  private void refreshView(){ mScrollView.setVisibility(View.GONE); mScrollView.setVisibility(View.VISIBLE); } 

Si no usted puede intentar esto también-

 ViewGroup vg = (ViewGroup) findViewById (R.id.videoTitleTxtView); vg.removeAllViews(); vg.refreshDrawableState(); 

Llamar invalidate() o postInvalidate() en el diseño raíz aparentemente no garantiza que las vistas de los niños se volverán a dibujar. En mi caso específico, mi disposición de la raíz era TableLayout y tenía varios niños de la clase TableRow y TextView. Llamar postInvalidate() , o requestLayout() o incluso forceLayout() en el objeto raíz de TableLayout no hizo que TextViews en el diseño se vuelva a dibujar.

Por lo tanto, lo que acabé haciendo fue recursivamente analizar el diseño en busca de esos TextViews y luego llamar a postInvalidate() en cada uno de esos objetos TextView.

El código se puede encontrar en GitHub: https://github.com/jkincali/Android-LinearLayout-Parser

Pruebe esta solución para el problema de tema:

 @Override public void onBackPressed() { NavUtils.navigateUpTo(this, new Intent(this, MyNeedToBeRefreshed.class)); } 

Simplemente configure su vista de contenido en onresume

SetContentView (R.layout.yourview) dentro de onResume ..

Ejemplo:

 @Override public void onResume(){ super.onResume(); setContentView(R.layout.activity_main); postIncomeTotals(); } 

Esto parece ser un error conocido .

Yo estaba teniendo este problema también, pero siguiendo el ejemplo de Farhan de usar setContentView () hice justamente eso. Usar setContentView () por sí mismo no fue suficiente sin embargo. Encontré que tenía que repoblar todas mis opiniones con información. Para arreglar esto acabo de sacar todo ese código a otro método (lo llamé construir) y en mi método onCreate simplemente llamo a esa compilación. Ahora, cada vez que mi evento ocurre, quiero que mi actividad se "refresque", solo llamo build, le doy la nueva información (la cual paso como parámetros para construir) y tengo una actividad actualizada.

 Intent intent = getIntent(); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); finish(); startActivity(intent); 

Esto le permite volver a cargar con los cambios de tema y oculta las animaciones.

No sé si esto es seguro o no, pero funcionó para mí. Me encontré un poco en este problema yo mismo e intentado invalidate() y requestLayout() pero en vano. Así que acabo de llamar a mi onCreate(null) todo de nuevo y funcionó. Si esto no es seguro por favor hágamelo saber. Espero que esto ayude a alguien por ahí.

Así es como he utilizado para actualizar mi diseño

 Intent intent = getIntent(); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION); finish(); startActivity(intent); 
  • Android: Cuando el teclado aparece, el diseño es invisible. ¿Cómo puedo solucionar esto?
  • ¿Cómo enlazar DataBinding de Android a Menú?
  • Problemas de representación de previsualización de diseño en android studio (Android Studio 1.2)
  • Cómo evitar el cambio de orientación para un diseño, no toda la pantalla / actividad
  • Android Porcentaje Altura de diseño
  • Android LinearLayout con varias filas
  • Preguntas relacionadas con la seguridad y el diseño de la facturación en la aplicación
  • ¿Creación de un diseño de chat?
  • Detectar barra de estado Visibilidad / TYPE_SYSTEM_OVERLAY no cambiar de tamaño automáticamente
  • ¿De dónde viene el espacio extra alrededor de mi botón?
  • Cómo mover 20dip margen izquierda del centro?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.