我有一个带有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,第二个片段几乎是相同的代码,只是更改了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和第3参数更改为(1,1)和(1,2)。还尝试了两者都是Menu.NONE。仍然不起作用。
谢谢
最佳答案
对于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);
}
希望这可以帮助!