我有一个带有 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。还是不行。
谢谢