如何获取触发上下文菜单的按钮视图?

3
我正在创建具有上下文菜单的动态按钮视图。当选择一个上下文菜单项时,我希望检索触发上下文菜单的按钮视图。
这是我创建按钮的方法:
// Create a new button
Button buttonView = new Button(this);
// Set button text
buttonView.setText("MyButton");
// Set on click listener
buttonView.setOnClickListener( new ButtonClickHandler() );
// Register for context menu
registerForContextMenu(buttonView);

这是我创建上下文菜单的方法:
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.context_menu, menu);
}

这是我如何处理所选项目的方式:
public boolean onContextItemSelected(MenuItem item) {

    // Get extra menu information about the item selected   
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();

    // 
    switch (item.getItemId()) {
    case R.id.delete:

        // Retrieve selected button text
        String btnText = ((Button) info.targetView).getText().toString();
        // etc...
        return true;
    default:
        return super.onContextItemSelected(item);
    }
}

问题在于"(AdapterContextMenuInfo) item.getMenuInfo()"返回null,即没有有关该项的额外信息。我原本期望在info.targetView中获得Button视图。显然,这仅适用于ListView,因为AdapterView负责填充此额外信息。
我想我应该在"onCreateContextMenu"中做些什么以附加此信息。非常欢迎提供一个附加此信息的示例代码。
谢谢。
1个回答

2
创建上下文菜单所使用的“按钮”是传递到“onCreateContextMenu”中的“View”参数。

1
Phil,我该如何在onContextItemSelected中获取用于创建上下文菜单的“Button”? - hleroy
3
嗨 Phil,我知道我可以在创建菜单时(即在 onCreateContextMenu 中)获取按钮。但我需要在选择项目时(即在 onContextItemSelected 中)获取按钮。 - hleroy
1
@hleroy,您可以将v保存到某个本地变量中,例如 public View lastContextMenuButton(或 public Button),然后在 onContextItemSelected 中使用lastContextMenuButton - Phil
2
你说得对:本地变量应该可以工作。但我希望有一种更简洁的方法,即在OnCreateContextMenu中设置菜单信息,然后通过item.getMenuInfo()在onContextItemSelected中获取信息。有一个内部类(com.android.internal.view.menu.MenuBuilder)有一个setCurrentMenuInfo方法。...但这是内部的。 - hleroy
1
这篇文章没有帮助,因为当视图是按钮时,menuInfonull。Android 文档说:“menuInfo 关于应显示上下文菜单的项目的额外信息。此信息将根据 v 的类而异。” 当 v 是 ListView 时,menuInfo 方法是可行的。但当它是一个 Button 时,它不起作用。无论如何,我已经按照您的建议将 v 保存到本地变量 public View lastContextMenuButton 中,并且我对此感到满意。我将此问题标记为已解决。 - hleroy
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接