1

我有一个带有 2 个片段的 TabHost,两个列表。onCreateContextMenu 对两者都适用,但是 onContextItemSelected 都“指向”第一个 Fragment 类。我为 XML 文件中的列表使用了不同的名称,因此 ID 不一样。

这是 onCreateContextMenu 的代码

@Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
        int itemID = info.position;

        Map m = (HashMap) this.listView.getAdapter().getItem(itemID);

        menu.setHeaderTitle(getString(R.string.options));
        menu.add(0, v.getId(), 0, activity.getString(R.string.delete));
    }

这里 onContextItemSelected 用于第一个 Fragment,第二个几乎是相同的代码,只是更改了 var 名称。事实上,这并没有改变任何问题,因为这个方法只在第一个 Fragment 上运行,即使我在第二个列表上也是如此。

@Override
    public boolean onContextItemSelected(MenuItem item) {
        ContextMenuInfo menuInfo = (ContextMenuInfo) item.getMenuInfo();
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
        int itemID = info.position;
        Map m = (HashMap) this.listView.getAdapter().getItem(itemID);
        processId = Integer.parseInt(m.get("processId").toString());

        activity.setSupportProgressBarIndeterminateVisibility(true);
        runBackground(activity.getString(R.string.accessingECM), false, false, ACTION_REMOVE);
        return true;
    }

这就是我在 onActivityCreated 方法上注册上下文菜单的方式。请注意,onCreateContextMenu 适用于这两个片段。

listView = (ListView) this.view.findViewById(R.id.listProcess);
        registerForContextMenu(listView);

我试图将 menu.add() 的第一个和第三个参数更改为 (1,1) 和 (1,2)。还尝试将两者都设为 Menu.NONE。还是不行。

谢谢

4

1 回答 1

0

对于 tabhost(根据我的经验),您需要在 tabhost 的活动中设置一个 onCreateContextMenu 并使用开关来获取适当的菜单/操作。

例子:

// ***************************************************************
// Create the various context menus depending on which list it is from
// ***************************************************************
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    switch (v.getId()) {
    case R.id.list1: {
        menu.setHeaderTitle("Tool CC Menu");
        menu.add(0, v.getId(), 0, "Edit/Add Cutter Comp Info");
        menu.add(0, v.getId(), 0, "Clear Cutter Comp Info");
        break;
    }
    case R.id.list2: {
        menu.setHeaderTitle("WPC Menu");
        menu.add(0, v.getId(), 0, "Edit WPC Info");
        menu.add(0, v.getId(), 0, "Clear WPC Info");
        break;
    }
    }
}
// ***************************************************************
// Create the various context menu actions based on which list
// ***************************************************************
@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
            .getMenuInfo();
    cc_id_int = (int) info.id;
    if (item.getTitle() == "Edit/Add Cutter Comp Info") {
        showDialog(CCEDIT_DIALOG_ID);
    } else if (item.getTitle() == "Clear Cutter Comp Info") {
        showDialog(CLEARCC_DIALOG_ID);
    } else if (item.getTitle() == "Edit WPC Info") {
        removeDialog(WPCEDIT_DIALOG_ID);
        showDialog(WPCEDIT_DIALOG_ID);
    } else if (item.getTitle() == "Clear WPC Info") {
        showDialog(CLEARWPC_DIALOG_ID);
    }
    return super.onContextItemSelected(item);
}

希望这可以帮助!

于 2012-05-07T14:54:53.230 回答