2012-12-16 2 views
1

J'ai un ExpandableListView, avec un adaptateur personnalisé, et dans mon détecteur de mouvement j'essaie de comprendre comment trouver l'élément de liste sélectionné par un geste.Après avoir converti MotionEvent en position, comment déterminer quel élément de liste a été référencé dans un expandelistview

class MyGestureDetector extends SimpleOnGestureListener { 
    @Override 
    public void onLongPress(MotionEvent e) { 
     int itemnum = listView.pointToPosition((int) e.getX(), (int) e.getY()); 
     itemnum -= listView.getFirstVisiblePosition(); 

Donc, si ItemNum = 7 il peut être

group A label 
group B label 
item B1 
item B2 
group C label 
item C1 
item C2 
item C3 <== this is position 7, assuming group A label was still on the screen 

Ainsi, si le groupe B était effondré alors ItemNum 7 serait être C5 ou D1.

Étant donné un numéro de position particulier, comment puis-je déterminer la position du groupe et la position enfant auxquelles il se réfère? Si je savais quel groupe a été développé, je pourrais faire une boucle, en comptant chaque élément, mais si la liste a défilé, alors les plus anciens ne devraient pas être comptés. Donc, étant donné un MotionEvent sur un ExpandableListView, comment puis-je le convertir en View?

Répondre

1

J'ai trouvé une solution. Pas certain si c'est la meilleure approche.

@Override 
    public void onLongPress(MotionEvent e) { 
     int itemnum = listView.pointToPosition((int) e.getX(), (int) e.getY()); 
        int itemnum2 = itemnum - listView.getFirstVisiblePosition(); 
     View vi = listView.getChildAt(itemnum2); 

C'est ainsi que j'obtiens la vue.

Malheureusement, pour trouver l'enregistrement des enfants, qui dans mon cas est un File je devais boucle, après avoir récupéré les TextView de vi ci-dessus:

   String filename = textView.getText().toString(); 
       int groupCount = mAdapter.getGroupCount(); 
       for(int t = 0; t < groupCount; t++) { 
         int childCount = mAdapter.getChildrenCount(t); 
         for(int y = 0; y < childCount; y++) { 
          File f = (File) mAdapter.getChild(t, y); 
          if (f.getName().equals(filename)) { 
          } 
         } 
       } 
Questions connexes