Android:ExpandableListView和上下文菜单

时间:2011-03-27 13:41:26

标签: java android

我正在使用 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中添加此侦听器,然后为子节点修补菜单,为我解决了这个问题。但它看起来很难看。我想念一下吗?

感谢。

1 个答案:

答案 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();
    }