【问题标题】:Android: ExpandableListView and context menusAndroid:ExpandableListView 和上下文菜单
【发布时间】:2011-03-27 13:41:26
【问题描述】:

我正在使用 ExpandableListView 编写应用程序。
我使用 BaseExpandableListAdapter 的子类向我的 ExpandableListView 提供数据。

然后我尝试将上下文菜单添加到此视图,但这些菜单对于可扩展列表中的子项分组应该是不同的。所以在我的适配器的 getChildViewgetGroupView 我这样调用 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() 检查它是组还是子项。但无论如何我不明白所描述的行为。

标签: java android


【解决方案1】:

我发现了新的: 在 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();
    }

【讨论】:

    猜你喜欢
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    相关资源
    最近更新 更多