1

Dans un ExpandableListActivity j'ai enregistré un ContextMenu. Ce que j'essaye de faire est de stocker les données de l'élément de liste d'enfant d'un groupe pour lequel le ContextMenu est pressé. Selon:Problèmes avec ContextMenu dans ExpandableListActivity

onCreateContextMenu(ContextMenu menu, View v, 
      ContextMenuInfo menuInfo) 

v est la vue pour laquelle le menu contextuel est en cours de construction. Donc, cette vue doit être celle de l'élément de la liste que je clique mais ce n'est pas le cas, il s'agit du premier élément de liste dans la liste des enfants. Je crois qu'il devrait retourner l'affichage de l'élément de liste pour lequel le menu contextuel est construit mais ce n'est pas le cas ici. Voici mon code:

public void onCreateContextMenu(ContextMenu menu, View v, 
      ContextMenuInfo menuInfo) { 
     menu.setHeaderTitle("My Crumbs"); 

     TextView rowid = (TextView) v 
       .findViewById(R.id.trackdetails_item_row_id); 
     rowId = rowid.getText().toString(); 

     ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) menuInfo; 
     int type = ExpandableListView 
       .getPackedPositionType(info.packedPosition); 

     // Only create a context menu for the child 
     if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { 

      TextView trackstats = (TextView) v 
        .findViewById(R.id.trackdetails_item_stats); 
    menu.add(0, MENU_SHARE, 0, "Share on Facebook"); 
     } 

    } 

Quelqu'un peut-il nous éclairer à ce sujet?

Edit:

Code pour la ExpandableListAdapter:

public class MyExpandableListAdapter extends SimpleCursorTreeAdapter { 

     public MyExpandableListAdapter(Cursor cursor, Context context, 
       int groupLayout, int childLayout, String[] groupFrom, 
       int[] groupTo, String[] childrenFrom, int[] childrenTo) { 
      super(context, cursor, groupLayout, groupFrom, groupTo, 
        childLayout, childrenFrom, childrenTo); 
      setViewBinder(viewBinder); 
     } 

     @Override 
     protected Cursor getChildrenCursor(Cursor groupCursor) { 
      // TODO Auto-generated method stub 
      String crumbName = groupCursor.getString(mCrumbNameColumnIndex); 
      return crumpareDBAdapter.getTrackList(mTracksProjection, crumbName); 
     } 

     @Override 
     public SimpleCursorTreeAdapter.ViewBinder getViewBinder() { 
      return viewBinder; 
     } 

    } 

Le code pour le ViewBinder:

SimpleCursorTreeAdapter.ViewBinder viewBinder = new ViewBinder() { 

     @Override 
     public boolean setViewValue(View view, Cursor cursor, int columnIndex) { 
      // TODO Auto-generated method stub 
     TextView textView = (TextView) view; 
     textView.setText(cursor.getString(columnIndex)); 
      return true; 
     } 
    }; 
+0

Vous pourriez avoir des problèmes à recycler vos éléments de liste dans votre adaptateur. Pourriez-vous s'il vous plaît partager ce code aussi? Merci! – rekaszeru

+0

Voici le code de l'adaptateur que j'utilise. Merci pour l'aide – rogerstone

+0

Et qu'est-ce que vous avez défini dans 'viewBinder'? Vous pourriez utiliser une implémentation de 'BaseExpandableListAdapter', ce serait beaucoup plus clair – rekaszeru

Répondre

1

Vous pouvez chercher l'id de l'enfant du ContextMenuInfo ainsi plutôt que de compter sur la vue. Voir le documentation pour cela car il devrait avoir ce que vous désirez.

+0

J'ai eu ce que je voulais. Je voulais savoir ce qui ne va pas avec cette méthode – rogerstone

+0

J'utilisais getExpandableListView.getChildAt (index) [où index = childpos] pour obtenir la vue correspondante mais ça ne donnait pas La vue était toujours ce que je devais utiliser. De plus, la vue cible du contexteMenuinfo vous donne la vue pour laquelle le menu contextuel est en cours. construit.Both d'entre eux se sont révélés être plus pratique pour moi.Merci beaucoup. – rogerstone

+1

Si vous utilisez le mécanisme standard pour _inflating_ les vues dans la liste extensible, c'est probablement le problème. Ils gonfleront seulement les vues dans la liste la première fois et réutiliseront les vues pour les articles suivants. Par conséquent, la vue que vous allez chercher ne contiendra certainement pas les données que vous désirez :). –