【发布时间】:2011-03-27 13:41:26
【问题描述】:
我正在使用 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 添加此侦听器然后为子级修补菜单为我解决了这个问题。但它看起来很丑。我错过了什么吗?
谢谢。
【问题讨论】:
-
我找到了更好的解决方案 - 使用 registerForContextMenu(getExpandableListView());在我的 ExpandableListActivity 中并通过调用 ExpandableListView.getPackedPositionType() 检查它是组还是子项。但无论如何我不明白所描述的行为。