gpt4 book ai didi

java - 上下文菜单与 TabHost 问题

转载 作者:行者123 更新时间:2023-12-01 05:20:33 26 4
gpt4 key购买 nike

我有一个带有 2 个 fragment 的 TabHost,两个 fragment 都是列表。 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 ,第二个 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 适用于两个 Fragment。

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

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

谢谢

最佳答案

对于 tabhost(根据我的经验),您需要在 tabhost 的 Activity 中设置一个 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);
}

希望这有帮助!

关于java - 上下文菜单与 TabHost 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10483591/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com