コンテクストメニューを使って実現する。
こんな感じで設定しておく。
mExpandableListView .setOnCreateContextMenuListener(new OnCreateContextMenuListener() { @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo) menuInfo; int type = ExpandableListView .getPackedPositionType(info.packedPosition); int groupPosition = ExpandableListView .getPackedPositionGroup(info.packedPosition); int childPosition = ExpandableListView .getPackedPositionChild(info.packedPosition); // Only create a context menu for child items if (type == 1) { // Array created earlier when we built the // expandable list Contact contact = (Contact) mAdapter.getChild( groupPosition, childPosition); menu.setHeaderTitle(contact.getName()); menu.add(0, MENU_EDIT, 0, "Edit birthday"); menu.add(0, MENU_DELETE, 1, "Delete birthday"); } } });
メニューが選ばれたらそれを実行。
public boolean onContextItemSelected(MenuItem menuItem) { ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) menuItem .getMenuInfo(); int groupPos = 0, childPos = 0; int type = ExpandableListView .getPackedPositionType(info.packedPosition); if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { groupPos = ExpandableListView .getPackedPositionGroup(info.packedPosition); childPos = ExpandableListView .getPackedPositionChild(info.packedPosition); } Contact contact = (Contact) mAdapter.getChild(groupPos, childPos); switch (menuItem.getItemId()) { case MENU_EDIT: dateDialog(contact, contact.getBirthday()); return true; case MENU_DELETE: deleteBirthday(contact); default: return super.onContextItemSelected(menuItem); } }
0 件のコメント:
コメントを投稿