2017-05-14 6 views
0

d'abord, je l'ai déjà essayé: Continuously increase integer value as the button is pressedComment augmenter la valeur d'un textview avec un gestionnaire? (Ou toute autre solution)

Mais j'avais 59 erreurs, yep, 59, et comme je l'habitude d'utiliser Eclipse qui vous a dit clairement ce genre d'erreur que vous aviez, comment pour résoudre ce problème, et Android Studio a été conçu pour les personnes expérimentées ... Je ne peux même pas comprendre ce qu'il faut faire pour réparer toutes les erreurs (btw, quand j'essaie de réparer quelque chose que je casse 10 de plus). Donc, avec un bouton et un TextView, comment faire pour augmenter le textview (comme un jeu Clicker par exemple) et le faire cesser d'appuyer à nouveau sur le même bouton: Et comment puis-je mettre les intervalles entre chaque « cliquez sur »

TextView score = (TextView) findViewById(R.id.textView); 
score.setText(Integer.toString(i)); 

    Button click = (Button) findViewById(R.id.button2); 
    click.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      i++; 
      score.setText(Integer.toString(i)); 

     } 
    }); 

d'ailleurs ... Je ne ai pas besoin de la solution, je dois comprendre exactement comment fonctionne fil ou Handlers, oui tout le monde me recommander la documentation, mais je dois voir un SIMPLE exemple expliqué partie par partie et je comprendrai plus que je fais déjà en lisant la documentation.

+0

Commencez par la première erreur. Qu'Est-ce que c'est? Quelle ligne de code le provoque? –

+0

"Quand j'essaie de réparer quelque chose, je brise 10 autres en quelque sorte" c'est une expérience commune pour tous les programmeurs, même les plus expérimentés –

+0

"J'ai besoin de comprendre comment fonctionne exactement Thread ou Handlers" Longtemps pour finir, comme lire un fichier ou télécharger une image. Les gestionnaires sont destinés à communiquer entre les threads. Vous n'avez pas besoin de l'un ou l'autre pour accomplir la tâche. –

Répondre

1

i besoin de comprendre comment Enfiler exactement ou Handlers fonctionne

Ce problème n'a pas besoin d'un Thread ou un Handler.

oui tout le monde me recommander la documentation

Je recommande la lecture d'un livre.

mais je dois voir un exemple simple explique partie par une partie

C'est ce que les livres sont pour. La documentation en fait des bribes, mais surtout c'est du matériel de référence.

Compte tenu d'un bouton et un TextView comment puis-je faire pour augmenter le textview (comme un jeu de Clicker par exemple) et faire arrêter en appuyant sur le même bouton: Et comment puis-je mettre les intervalles entre chaque « clic »

Étant donné vos score et click widgets de votre question:

Étape # 1: Ajouter un champ Runnable à votre activité ou d'un fragment. Ici, je vais l'appeler incrementer. Étape # 2: Définissez un champ static final int DELAY dans votre activité ou fragment, avec la période de délai que vous souhaitez ("intervalles") en millisecondes.

Étape # 3: Demandez à votre Button utilisation postDelayed() et removeCallbacks(), en fonction de l'état de incrementer:

click.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(final View v) { 
    if (incrementer==null) { 
     incrementer=new Runnable() { 
     @Override 
     public void run() { 
      i++; 
      score.setText(Integer.toString(i)); 
      v.postDelayed(incrementer, DELAY); 
     } 
     }; 
     incrementer.run(); 
    } 
    else { 
     v.removeCallbacks(incrementer); 
     incrementer=null; 
    } 
    } 
} 

Le champ incrementer sert deux rôles. Il vérifie si nous incrémentons le contenu TextView ou non, et c'est le code réel qui fait l'incrémentation.

Si incrementer est null, nous n'augmentons pas actuellement le TextView. Donc, nous affectons incrementer un Runnable qui peut incrémenter le TextView. Le Runnable appelle également postDelayed() pour dire "hé, exécutez ce Runnable à nouveau après DELAY millisecondes". Nous run() le Runnable nous-mêmes la première fois, à la fois peupler le TextView au départ et de déclencher l'appel postDelayed() pour planifier l'incrément suivant.

Cela continuera alors à "boucler" (run() en appelant postDelayed(), en programmant un appel futur à run()) jusqu'à ce que l'utilisateur clique à nouveau sur le bouton. Ensuite, nous voyons que incrementer est pasnull, donc nous devons incrémenter le TextView et nous devons arrêter. removeCallbacks() désinscrit le dernier appel postDelayed(), en arrêtant la "boucle". Nous avons mis incrementer à null surtout pour nous préparer pour le prochain clic de bouton.

+0

Désolé pour la réponse tardive "Réponse correcte": D Et merci pour l'explication. –