0

J'ai mal à la tête dans le projet Android actuel. Je veux détecter le changement de la page actuelle. Par exemple, il existe un TextView pour afficher l'heure du périphérique, qui est mise à jour par seconde. Comment détecter ce changement? J'ai beaucoup cherché sur SO (merci SO), mais aucun ne fonctionne pour moi.Android - onGlobalLayout n'est pas appelé par ViewTreeObserver

Plus d'informations: Je n'utilise pas l'activité standard pour créer une page. Mon chemin est: Tous les widgets sont créés dans un objet View qui est ensuite utilisé pour créer un objet conteneur. Après cela, je gère simplement ce conteneur pour dessiner sur une toile avec un VSYNC rappel Choreographer.FrameCallback périodiquement.

En effet, cela fonctionne pour dessiner. Tout va bien. Excepté: Je veux dessiner canvas uniquement lorsque le contenu de la page a changé. Donc, revenons à ma question de début, comment détecter cet événement "changeant"? Je suis sûr qu'il y a une sorte de rappel pour gérer ce problème. J'ai utilisé la solution suivante, mais onGlobalLayout n'est pas appelée lorsque le texte de textview a changé.

CanvasAppViewContainer container;//CanvasAppViewContainer extends AbsoluteLayout 
LayoutInflater li =(LayoutInflater)getService().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  

View view = li.inflate(resourceId, null);//passed a correct the layout id 
container = new CanvasAppViewContainer(getService(), view, getWidth(), getHeight(), getSurface()); 
rootView = (LinearLayout) findViewById(R.id.rootView); //root element of layout 
rootView.getViewTreeObserver().addOnGlobalLayoutListener(
    new ViewTreeObserver.OnGlobalLayoutListener() { 
    @SuppressLint("NewApi") 
    @Override 
    public void onGlobalLayout() { 
     Log.d("test", "onGlobalLayout"); 
    } 
}); 

BTW: Même si j'enregistrer l'observateur de l'arbre de la vue textview, onGlobalLayout est toujours pas appelé.

Merci

Répondre

0

onGlobalLayout() est appelée uniquement lorsque la mise en page changements. Lorsque vous souhaitez détecter une modification dans le texte utilisez TextView.addTextChangedListener()

+0

Merci. En fait, si vous vous enregistrez dans l'arborescence de vue de l'arborescence pour textview, lorsque le texte est modifié, onGlobalLayout() est également appelé dans l'activité normale. – Vincent

+0

Peut-être que le changement de texte fait que TextView change sa taille, ce qui déclenche OnGlobalLayout() dans votre acivité "normale"? – murf

+0

Je viens de définir le même texte à plusieurs reprises. – Vincent