【问题标题】:How to get the Button view which triggered a Context Menu?如何获取触发上下文菜单的按钮视图?
【发布时间】:2011-08-01 20:59:06
【问题描述】:

我正在使用上下文菜单动态创建按钮视图。选择上下文菜单项时,我想重试按钮视图触发上下文菜单。

这就是我创建按钮的方式:

// 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”中做一些事情来附加这些信息。非常欢迎提供附加此信息的示例代码。

谢谢

【问题讨论】:

    标签: android


    【解决方案1】:

    用于创建上下文菜单的Button 是传递给onCreateContextMenuView 参数。

    【讨论】:

    • Phil,我怎样才能将用于创建上下文菜单的Button 放入onContextItemSelected 中?
    • 嗨菲尔,我知道我可以在创建菜单时获得按钮(即进入onCreateContextMenu)。选择项目时我需要按钮(即进入onContextItemSelected)。
    • @hleroy,你可以将 v 保存到某个局部变量,比如public View lastContextMenuButton(或public Button),然后在onContextItemSelected 中使用lastContextMenuButton
    • 你是对的:局部变量应该可以工作。但我希望有一种更简洁的方法,即在OnCreateContextMenu 中设置菜单信息,然后通过onContextItemSelected 中的 item.getMenuInfo() 获取信息。有一个内部类 (com.android.internal.view.menu.MenuBuilder),它有一个 setCurrentMenuInfo 方法。 ...但这是内部的。
    • 这篇文章没有帮助,因为当视图是一个按钮时,menuInfonull。 Android 文档说“menuInfo 有关应显示上下文菜单的项目的额外信息。此信息将根据 v. 的类别而有所不同。”。当 v 是 ListView 时,menuInfo 方法很好。当它是Button 时,它不起作用。无论如何,我已按照您的建议将 v 保存到局部变量 public View lastContextMenuButton 中,我对此很好。我将此问题标记为已解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多