Question

J'utilise la disposition de la table pour afficher les données, mais je veux qu'il se comporte comme éléments de liste (Possibilité de sélectionner, lorsque l'on sélectionne fond de changement, quand clic, ayant un effet vol stationnaire, cliquez sur mesure) à cette fin je suis en utilisant les auditeurs suivants

  • OnClickListener(to perform action)
  • OnFocusChangeListener(To change background color)
  • OnTouchListener(to focus specific row)

problème est lorsque l'utilisateur touche tout élément il se concentrer d'abord et ensuite de toucher à nouveau au feu événement onclick, pour corriger ce que je fait un changement et l'action OnTouch i feu sur spécifique à la ligne.

@Override
public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() != MotionEvent.ACTION_UP){
        v.requestFocus();
        int viewId= v.getId();
        handleEvent(viewId);//Switch cases to perform row specific actions.
    }
    return false;
}

si l'utilisateur touche l'événement de ligne viré qui fonctionne parfaitement, mais un autre problème se lève ici quand même envie utilisateur de faire défiler les données via glisser le doigt sur l'événement ontouch écran se faire virer .... et l'action effectuée automatiquement bien l'utilisateur pense qu'il scroll down l'écran.

Était-ce utile?

La solution

Je ne sais pas si cette solution est applicable dans votre cas, mais peut-être vous pouvez faire comme ceci: Supposons que l'utilisateur clique sur votre article (donc probablement vous obtiendrez séquence de trois événements à votre méthode OnTouch ():.. Action_ BAS, MOVE de action_ (pas nécessairement) et ACTION_UP Maintenant, vous pouvez réagir en conséquence

  1. Si c'est ACTION_DOWN, vous pouvez enregistrer les coordonnées x et y.
  2. Si c'est action_ MOVE, prendre sa x et y et calculer la distance entre correspondante ACTION_DOWN. Si elle est plus longue que une valeur supposée, puis faire défiler et mettre le drapeau indiquant que les éléments ont été défiler.
  3. Si c'est ACTION_UP vérifier votre drapeau. Si les éléments ne sont pas défiler, le feu de votre action et effacer le drapeau.

Probablement les calculs ne sont pas ce que vous devez faire en cas ACTION_MOVE, car il devrait être rapide, mais lui donner un essai.
Cordialement!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top