2011-08-11 3 views
0

J'essaye de mettre à jour un TextView qui montrera le volume de système. J'ai réussi à capturer le volume actuel du système et à l'afficher, mais il ne se met pas à jour lorsque le volume est augmenté/diminué (évidemment).Mise à jour de TextView sur keyDown?

Je sais qu'il y a une solution facile quelque part que je ne peux pas penser! onKeyListeners?

Je me sers maintenant cela, mais cela ne fonctionne pas:

TextView sysVol = (TextView)findViewById(R.id.systemVolume);   
    sysVol.setOnKeyListener(new OnKeyListener() 
    {       
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
       if (keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { 

       //system volume 
       int curVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 
       int i = curVolume * 4; 
       String aString = Integer.toString(i); 

       TextView sysVol = (TextView)findViewById(R.id.systemVolume); 
       sysVol.setText(aString); 

       return true; 
      } 
       return false; 
     } 
    }); 

Répondre

0

Eh bien, l'approche pseudo serait le scénario suivant:

1) Attach a listener to the view 
2) Filter the different events in the callback 
3) Update the TextView upon the (event==volume_up OR event==volume_down) 

Fondamentalement, vous voulez mettre en œuvre le View.onKey() - méthode pour que ce soit une bosse mineure dans la route, au lieu de l'état actuel de barrage routier.

Résumé: Ajouter l'extrait suivant à votre code (quelques modifications nécessaires)

public YourClassHere extends SomethingCool implements OnKeyListener /*<-- important part*/ 
{ 
    public boolean onKey(View v) { 
     // do something when the selected button is pushed 
     return true; 
    } 
} 
+0

J'ai un code ci-dessus qui ressemble à ce dont j'ai besoin mais n'est pas de travail, des idées? – Jonno

0

Je pense que le problème est que le textview n'est pas rafraîchissant après avoir modifié le texte. Essayez de mettre sysVol.requestLayout() après avoir modifié le texte pour actualiser la vue texte. En outre, je ne pense pas que vous êtes supposé mettre return false après le crochet de fermeture de la méthode onKey().

+0

J'étais plein d'espoir, mais cela n'a pas fonctionné. Il a besoin du retour false si la clé n'est pas volée vers le haut ou vers le bas – Jonno

+0

Que faire si vous appelez 'invalidate()'? C'est censé forcer un redessin d'éléments. 'sysVol.invalidate()' serait le moyen de l'essayer. – ninetwozero

Questions connexes