182 votes

Comment forcer une mise en page entière Voir rafraîchir?

Je veux forcer la vue principale des ressources de présentation à redessiner / actualiser, par exemple la méthode Activity.onResume (). Comment puis-je faire ceci ?

Par vue principale, j'entends celui ("R.layout.mainscreen" ci-dessous) appelé dans mon Activity.onCreate (), comme ceci: -

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

Toute aide, très appréciée, M.

157voto

Aleadam Points 25433

À strictement répondre à la question: Utilisez invalidate():

public void invalidate () Depuis: l'API de Niveau 1

La nullité de l'ensemble de la vue. Si la vue est visible, onDraw(Canvas) sera appelée à un certain moment dans l'avenir. Ce doit être appelé à partir d'un thread d'INTERFACE utilisateur. Pour appeler à partir d'un non-thread de l'INTERFACE utilisateur, appelez postInvalidate().

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

Maintenant, lors de la reprise de l'Activité, il met tout en Vue de dessiner lui-même. Pas d'appel à la invalidate() ne devraient pas être nécessaires. Pour appliquer le thème, assurez-vous de le faire avant de tout point de Vue est établi, c'est à dire, avant d' setContentView(R.layout.mainscreen);

public void setTheme (int resid) Depuis: l'API de Niveau 1

Définir le thème de base de ce contexte. Notez que cette opération doit être appelée avant tout points de vue sont instanciés dans le Contexte (par exemple avant d'appeler setContentView(point de Vue) ou gonfler(int, ViewGroup)).

La doc API de référence est ici: http://developer.android.com/reference/android/view/ContextThemeWrapper.html#setTheme%28int%29

Depuis le onDraw() la méthode fonctionne sur instanciée déjà Vues, setTheme ne fonctionnera pas. Je n'ai aucune expérience avec les thèmes de moi-même, mais le choix entre deux options que je peux penser sont:

  1. appel setTheme dans onCreate() à la place, ou
  2. refaire setContentView (R. layout.écran principal); à force de retrouver toutes les mise en page.

43voto

keyboardsurfer Points 7432

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

41voto

Mohanad Kholy Points 116

Essayez de recréer () car cette activité sera recréée.

9voto

Datta Kunde Points 339

Sinon, vous pouvez essayer aussi

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

4voto

Krilivye Points 167

Essayez cette solution de contournement pour le problème de thème:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X