我有一个包含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。仍然无效。
由于
答案 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);
}
希望这有帮助!