ExpandableListView中setOnChildLongClickListener().事件

ExpandableListView有一个setOnChildClickListener 却没有setOnChildLongClickListener()事件,为了解决此问题 引用

http://steveoliverc.wordpress.com/2009/10/16/context-menus-for-expandable-lists/

 

 

这里把上文全部复制过来

An expandable list supports context menus in pretty much the same way that a standard list does: add a listener for the context menu (when the user has long-pressed on a list item). Unlike a standard list view, however, you probably want to know whether the user has selected a group (expandable item) or a child (sub-item) list item.

Furthermore, you might not want to do anything if the user tries to bring up a context menu on a group item. There might be cases where you would want to do something to all of the children under a group, but in my Librarium application, I wanted to ignore group items and present the context menu only for children.

First, you need to know when the context menu is going to be created so that you can identify whether the user pressed on a group or a child. If they pressed on a group, then cancel the context menu. This also gives us a chance to get the text of the child item, so that we can put it into the header of the context menu.

public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {

super.onCreateContextMenu(menu, v, menuInfo);

 

ExpandableListView.ExpandableListContextMenuInfo info =

(ExpandableListView.ExpandableListContextMenuInfo) menuInfo;

int type =

ExpandableListView.getPackedPositionType(info.packedPosition);

int group =

ExpandableListView.getPackedPositionGroup(info.packedPosition);

int child =

ExpandableListView.getPackedPositionChild(info.packedPosition);

 

//Only create a context menu for child items

if (type == 1) {

//Array created earlier when we built the expandable list

String page =mListStringArray[group][child];

menu.setHeaderTitle(page);

menu.add(0, MENU_READ, 0, “Read page”);

menu.add(0, MENU_EDIT, 0, “Edit page”);

menu.add(0, MENU_FAVORITE, 0, “Add page to favorites”);

menu.add(0, MENU_EXPORT, 0, “Export page to file”);

menu.add(0, MENU_DELETE, 1, “Delete page”);

}

}

 

Second, create the context menu:

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);

}

 

//Pull values from the array we built when we created the list

String author = mListStringArray[groupPos][0];

String page = mListStringArray[groupPos][childPos * 3 + 1];

rowId = Integer.parseInt(mListStringArray[groupPos][childPos * 3 + 3]);

 

switch (menuItem.getItemId()) {

case MENU_READ:

readNote(rowId);

return true;

case MENU_EDIT:

editNote(rowId);

return true;

//etc….

default:

return super.onContextItemSelected(menuItem);

}

 

}

 

That’s it. Now users can long-press on an item in an expandable list, and get the context menu if it’s a child item.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值