2011-07-04 5 views
9

Disons que j'ai un Android ListView que j'attaché un OnItemClickListener à:Obtenir clic coordonnées dans Android ListView OnItemClickListener

ListView listView = (ListView) findViewById(...); 
listView.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     [...] 

Lorsqu'un certain élément de la vue est cliqué, je peux comprendre le rectangle correspondant par obtenir les dimensions de view. Cependant, je voudrais obtenir les coordonnées correspondantes encore plus précisément pour identifier le point sur l'écran que l'utilisateur a effectivement cliqué.

Malheureusement, l'API OnItemClickListener ne semble pas exposer cette information. Existe-t-il d'autres moyens de se procurer ce détail (sans réinventer fièrement la roue en mettant en œuvre le mien ListView)?

Répondre

19

J'avais besoin de faire ceci aussi. J'ai placé un OnTouchListener et un OnItemClickListener sur le ListView. L'écouteur tactile est déclenché en premier, vous pouvez donc l'utiliser pour définir une variable à laquelle vous pouvez accéder à partir de votre onItemClick(). Il est important que votre onTouch() renvoie false, sinon il va consommer le robinet. Dans mon cas, j'avais seulement besoin de la coordonnée X:

private int touchPositionX; 

... 

getListView().setOnTouchListener(new OnTouchListener() { 
    public boolean onTouch(View view, MotionEvent event) { 
    touchPositionX = (int)event.getX(); 
    return false; 
    } 
}); 

getListView().setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    if (touchPositionX < 100) { 
    ... 
+0

Merci, c'est bon! –

+0

C'est une bonne solution. Merci. – MattD

Questions connexes