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;
}
};
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
Voici le code de l'adaptateur que j'utilise. Merci pour l'aide – rogerstone
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