2017-01-10 4 views
0

Cette question n'est pas virile pour Android, mais je vais utiliser un exemple android pour expliquer. Je souhaite créer une classe qui doit remplacer la méthode onTouchListener, à utiliser sur tout objet utilisant ces méthodes tactiles. Puisque après une entrée tactile, la méthode démarre une fonction, et comme c'est une classe, elle peut être instanciée plusieurs fois (et je veux être instanciée plusieurs fois), je veux empêcher que deux instances soient appelées en même temps. Je suppose que je pourrais créer une variable à l'intérieur de la classe, qui assure que si elle est vraie, elle peut exécuter la méthode, mais je dois la vérifier pour toutes les instances de la classe.Java/Android - Comment puis-je savoir qu'une variable d'une instance d'une classe est vraie?

Et puisque je veux en faire une bibliothèque, je dois le faire dans la classe elle-même.

Donc, ma question est, (Java Question) Comment puis-je savoir qu'une variable d'une instance d'une classe est vraie?

(Question Android) Ou si ce n'est pas possible, Comment puis-je empêcher plusieurs événements tactiles en même temps?

Répondre

0

Vous pouvez envisager de créer une classe Singleton. Les classes Singleton permettent de créer UNIQUEMENT une instance/objet de cette classe et de la réutiliser ensuite.

+0

Merci pour votre question Le problème est que je veux autoriser plusieurs instances ... Je veux juste les empêcher de fonctionner en même temps ... Des sugestions? – slyzer

0

Vous pouvez utiliser un champ statique dans ce contexte. Un champ statique est identique pour toutes les instances d'une classe.

Vous pouvez le faire peut-être comme ceci:

public Example implements TouchInterface{ 
    private static boolean actuallyRunning = false; 

    public void touchExecute(){ 
     if(!actuallyRunning){ 
      actuallyRunning = true; 
      callYourFunction(); 
      actuallyRunning = false; 
     } 
    } 

} 
+0

Merci pour votre réponse, mais comment puis-je vérifier dans la classe? Si j'ai plusieurs instances de la même classe, Comment puis-je vérifier dans la classe si les autres variables sont vraies? – slyzer

+0

Pourquoi voulez-vous vérifier cela? Avec le code ci-dessus, vous empêchez plusieurs événements tactiles en même temps. Vous n'avez pas besoin de vérifier l'état pour chaque instance – ZeusNet

+0

Peut-être que je vois mal, mais la variable 'actuallyRunning', n'est valide que pour une instance spécifique ... Si je crée une nouvelle instance de la classe TouchInterface, la variable avec être différent, parce que j'ai seulement changé pour cette instance. La variable n'est pas globale à toutes les instances, n'est-ce pas? – slyzer

0

Vous pouvez utiliser la classe singleton si vous voulez une seule instance et si vous voulez gérer les multiples événements tactiles

  1. vous pouvez désactiver dès que votre gestionnaire démarre et active ensuite.

  2. vous pouvez ajouter un laps de temps dans la pratique normale, il est l'un sec mais cela dépend de la complexité vous gestionnaire

Comme cet exemple:

// Make ur activity class to implement View.OnClickListener 
    public class MenuPricipalScreen extends Activity implements View.OnClickListener{ 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // setup listeners. 
    findViewById(R.id.imageView2).setOnClickListener(MenuPricipalScreen.this); 
    findViewById(R.id.imageView3).setOnClickListener(MenuPricipalScreen.this); 
    .... 
} 

. 
. 
. 
// variable to track event time 
private long mLastClickTime = 0; 

//View.OnClickListener.onClick method defination 

@Override 
public void onClick(View v) { 
// Preventing multiple clicks, using threshold of 1 second 
if (SystemClock.elapsedRealtime() - mLastClickTime < 1000) { 
    return; 
     } 
mLastClickTime = SystemClock.elapsedRealtime(); 

     // Handle button clicks 
     if (v == R.id.imageView2) { 
    // Do ur stuff. 
    } 
     else if (v == R.id.imageView2) { 
    // Do ur stuff. 
    } 
     ... 
    } 

. . »

+0

Merci pour votre réponse, Oui, cela devrait fonctionner ... Le problème est que je veux créer une bibliothèque de la classe, et je veux faire la comparaison dans la classe ... ne pas forcer l'autre programmeur à le faire Vous avez d'autres idées? – slyzer

+0

Mieux vous variable statique pour cela et utilisez la méthode synchronisée pour y accéder. – RATHI

1

Vous pouvez obtenir cela avec des données statiques et/ou une méthode pour cette classe. Un élément statique peut être accessible de n'importe où en utilisant le nom de la classe: ex: MyClass.isAlreadyRunning();

Vous pouvez par exemple stocker dans un tableau tous les états en cours d'exécution des instances et créer une méthode statique qui vérifie le tableau s'il en existe déjà un.

+0

Merci pour votre réponse, Oui, cela pourrait fonctionner ... Le problème est que je veux créer une bibliothèque de la classe, et je veux faire la comparaison dans la classe ... ne pas forcer l'autre programmeur à le faire Vous avez d'autres idées? – slyzer

+0

il devrait y avoir aucun problème, ces éléments statiques sont également accessibles depuis l'intérieur de la classe elle-même. La vérification peut être effectuée au début de la méthode override (voir l'exemple ZeusNet) – Kaddath

0

Vous devez mettre "public synchronized" void, cela empêchera d'être appelé en parallèle. Si vous devez redéfinir, placez un objet synchronisé dans la méthode afin qu'il fasse la même chose.

+0

Merci pour votre réponse, Oui, 'synchronized' empêchera en effet les exécutions parallèles, mais elles seront toutes les deux exécutées. Je veux m'assurer qu'un seul est exécuté Vous avez des idées? – slyzer

+0

Quels sont les critères de rejet de la deuxième touche? –

+0

Si autre a commencé, juste que ... – slyzer