Continuellement augmenter la valeur d'entier que le bouton est pressé
Je suis nouveau sur Android, donc désolé si la question est facile à résoudre. J'ai deux boutons, une diminution et une augmentation de bouton, et au milieu d'eux un TextView qui affiche une valeur.
Quand j'appuie sur le bouton diminuer, la valeur dans le TextView diminue et augmente quand j'appuie sur le bouton augmenter, pas de problème avec ça, je l'ai eu à travailler, mais le problème est que la valeur n'augmente/diminue de 1 en un seul clic. Ce que je suis en train de réaliser, c'est que comme je vous appuyez continuellement sur le bouton (le bouton augmenter par exemple), la valeur est également d'une augmentation continue et ne s'arrête que lorsque je presse le bouton augmenter.
Est-ce possible? Si oui, pouvez-vous montrer un exemple de code ou de références sur la façon de mettre cela en œuvre? Merci!
Voici mon main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="44dp"
android:gravity="center_horizontal" >
<Button android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="<" />
<TextView android:id="@+id/textView1"
android:layout_width="50dp"
android:layout_height="fill_parent"
android:layout_alignBottom="@+id/button1"
android:layout_toRightOf="@+id/button1"
android:gravity="center"
android:text="45" />
<Button android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/textView1"
android:text=">" />
</RelativeLayout>
</RelativeLayout>
et voici mon Main.java
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class Main extends Activity {
private Button _decrease;
private Button _increase;
private TextView _value;
private static int _counter = 45;
private String _stringVal;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
_decrease = (Button) findViewById(R.id.button1);
_increase = (Button) findViewById(R.id.button2);
_value = (TextView) findViewById(R.id.textView1);
_decrease.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.d("src", "Decreasing value...");
_counter--;
_stringVal = Integer.toString(_counter);
_value.setText(_stringVal);
}
});
_increase.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.d("src", "Increasing value...");
_counter++;
_stringVal = Integer.toString(_counter);
_value.setText(_stringVal);
}
});
}
}
Vous devez vous connecter pour publier un commentaire.
Pour que cela fonctionne, vous avez besoin d'un thread qui va mettre à jour la valeur de l'entier lorsque vous appuyez longuement sur un bouton.
Créer un gestionnaire dans votre activité:
Et 2 vars qui va de l'état: est-il augmenter ou diminuer? Un seul jeu à la fois.
Et le présent numéro de valeur
Et une classe qui sera exécuté dans un autre thread:
Ajouter une pression longue sur l'écouteur de votre bouton:
Dans le cas ci-dessus, le bouton est l'incrément de un. Créer un bouton qui permettra de définir mAutoDecrement de vrai.
Et de décrémentation() sera une fonction, qui va définir votre instance int variable comme ceci:
Vous la figure de l'incrément de sortir. Oh, et REP_DELAY est un static int variable fixée à 50.
Je vois ceci est un extrait de Jeffrey Cole open source NumberPicker disponible à http://www.technologichron.net/ Bon auteur de l'attribution doit être ajouté.
increment()
fonction et a déclaré que leREP_DELAY
, aucune erreur, mais quand je clique sur le bouton d'incrémentation, la valeur augmente, mais même si je le libère, la valeur est toujours à la hausse et ne s'arrête pas. En va de même avec le bouton diminuer. Ai-je raté quelque chose?handler post runnables
... supprimerrunnable callbacks
dehandler
surtouch up
Ma façon d'augmenter la valeur à long cliquez sur est d'utiliser une Minuterie utilisée pour vérifier périodiquement si le bouton est toujours pressé et que l'accroissement de la valeur, sinon annuler la minuterie. Pour mettre à jour l'INTERFACE utilisateur utilisation de Gestionnaire.
Gestionnaire:
Je suis en retard pour répondre à cette question, mais il peut aider toute personne qui est à la recherche pour une meilleure réponse.
J'ai créé un
CounterHandler
classe et son incroyablement facile à utiliser pour atteindre le ci-dessus mentionné continue compteur de fonctionnalité.Vous pouvez trouver la classe en suivant gist avec un "mode d'emploi" par exemple.
https://gist.github.com/nomanr/d142f4ccaf55ceba22e7f7122b55b9b6
Exemple de code
C'est tout. 🙂
Il semble il n'y a pas de solution parfaite à cette question et il y aura toujours une certaine complexité.
C'est ma tentative, qui intègre Wiktor réponse, mais donne un tout MainActivity que vous pouvez couper/coller.
Dans mon exemple, le complexe est la partie la onLongClickListener, et à quelle profondeur il se passe et comment beaucoup de niveaux de anonyme les classes y sont.
Cependant, d'autre part, la simplicité, c'est que tout est inclus dans un relativement court (de la classe MainActivity), et il y a un seul grand bloc de code, le onLongClickListener -- qui est défini une seule fois et il est très clair où le "action", le code est:
Veux juste faire part de ma propre solution qui a fonctionné pour moi vraiment bien.
Tout d'abord, créez un gestionnaire d'événements dans votre activité
Ensuite, créez le runnables qui va incrémenter/décrémenter et d'affichage de votre numéro. Ici, nous allons vérifier si votre bouton est toujours dans son état activé et l'incrément puis exécutez l'exécutable, si il est.
Enfin, l'utiliser dans notre bouton de onLongClickListener
Que c'est!
Une autre façon de le faire est de déclarer à la fois le gestionnaire et praticable à l'intérieur de la OnLongClickListener lui-même bien que je me suis pas sûr si c'est une bonne pratique.
Quand vous faites cela, continue de s'incrémenter, je suggère d'augmenter la valeur de l'incrément après un certain temps/nombre de tranches.
E. g. Si le number_of_increment est moins que 10, on incrémente de 1. Sinon, on incrémente par 3.
Alors que l'on a accepté la réponse est tout à fait correcte, il peut être simplifié un peu.
Fondamentalement, nous pouvons optimiser deux choses:
C'est donc ma version:
Ici l'objet praticable est réutilisé. Et quand la vue n'est pas pressé de plus, il va arrêter d'appeler lui-même.
La diminution de la vue ou de bouton peuvent être définies de la même façon.