具有TabHost问题的上下文菜单

时间:2012-05-07 14:09:48

标签: java android

我有一个包含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));
    }

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

@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适用于Fragment。

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

我尝试将menu.add()第1和第3个参数更改为(1,1)和(1,2)。还尝试了两个Menu.NONE。仍然无效。

由于

1 个答案:

答案 0 :(得分: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);
}

希望这有帮助!