2009-12-18 4 views
0

J'utilise la mise en page de tableau pour afficher les données, mais je veux qu'il se comporte comme les éléments de la liste (possibilité de sélectionner, lorsque vous sélectionnez changer d'arrière-plan, cliquez, avoir un effet de survol, cliquez) but je suis en utilisant les auditeurs suivantsAndroid viewview se comporte comme une listeview

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

maintenant problème est quand l'utilisateur touchez n'importe quel élément, il se concentrer d'abord, puis avoir à toucher à nouveau pour déclencher l'événement onclick, pour résoudre ce que j'ai fait un changement et ontouch je tire action 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; 
} 

maintenant si l'utilisateur Appuyez sur l'événement de la ligne qui fonctionne viré parfait, 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 de l'écran ontouch obtenir mis le feu .... et action automatiquement effectuée bien que l'utilisateur pense qu'il va scroll down l'écran.

Répondre

1

Je ne sais pas si cette solution est applicable dans votre cas, mais peut-être que vous pouvez faire comme ceci: Supposons que l'utilisateur a cliqué sur votre article (donc vous obtiendrez probablement la séquence de trois événements à votre méthode OnTouch() :.. action_ BAS, MOVE 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 de ACTION_DOWN correspondant.Si elle est plus longue qu'une certaine valeur supposée, alors faites le défilement et définissez le drapeau indiquant que les éléments ont été défilés
  3. Si c'est ACTION_UP, vérifiez votre drapeau. Si les objets n'ont pas défilé, lancez votre action et effacez le drapeau.

Probablement les calculs ne sont pas ce que vous devriez faire dans l'événement ACTION_MOVE, car cela devrait être rapide, mais essayez-le.
Cordialement!

Questions connexes