我正在使用 ExpandableListView 编写应用程序 我使用 BaseExpandableListAdapter 的子类为我的 ExpandableListView 提供数据。
然后我尝试向此视图添加上下文菜单,但这些菜单应该与可扩展列表中的子项目组不同。所以在我的适配器的 getChildView 和 getGroupView 中,我像这样调用 setOnCreateContextMenuListener :
TextView textView = new TextView(TestActivity.this);;
textView.setText(getChild(groupPosition, childPosition).toString());
textView.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenu.ContextMenuInfo menuInfo) {
TestActivity.this.onCreateChildContextMenu(menu, v, menuInfo);
}
});
return textView;
TestActivity.this.onCreateChildContextMenu 只需在菜单中添加一些字符串。
问题:
这很好 - 上下文菜单出现并按预期工作,但组项目不能再展开。它只是忽略了短暂的点击。我检查过 - 正如预期的那样,textView在此行之后变为isLongClickable()但它仍然不是isClickable() - 所以我看不出这个上下文菜单回调如何影响短点击功能。
我通过在整个ExpandableListView中添加此侦听器,然后为子节点修补菜单,为我解决了这个问题。但它看起来很难看。我想念一下吗?
感谢。
答案 0 :(得分:2)
我找到了新的: 在getChildView中:
convertView.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
String menuItems[];
menuItems = getResources().getStringArray(R.array.contextmenu);
menu.setHeaderTitle(getResources().getString(R.string.sms_select));
for (int i = 0; i<menuItems.length; i++) {
menu.add(Menu.NONE, i, i, menuItems[i]);
}
}
});
和:
@Override
public boolean onContextItemSelected(MenuItem item) {
ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo();
int menuItemIndex = item.getItemId();
}