2011-08-01 51 views
3

我使用上下文菜单动态创建按钮视图。当选择一个上下文菜单项时,我想要检索触发上下文菜单的Button视图。如何获得触发上下文菜单的按钮视图?

这是我创建的按钮:

// 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,即没有关于ite的额外信息米我期待在info.targetView中获得Button视图。显然这只适用于ListView,因为AdapterView负责填充这些额外的信息。

我想我应该在“onCreateContextMenu”中添加一些内容来附加这些信息。附上这些信息的示例代码将非常受欢迎。

感谢

回答

2

Button是用于创建上下文菜单是View参数传递到onCreateContextMenu

+1

菲尔,我怎么能得到用于创建上下文菜单到'onContextItemSelected'的'Button'? – hleroy

+0

@hleroy,它已经在那里。当你为上下文菜单注册一个'View'(比如'Button'):'registerForContextMenu(myButton);'时,你可以点击按钮来打开一个上下文菜单。然后,在'onCreateContextMenu(ContextMenu菜单,View v,ContextMenuInfo menuInfo)'中,'View v'是按钮。你可以检查被选中的视图是否是某个按钮,如:if(v == myButton){do something; }' – Phil

+3

嗨菲尔,我明白我可以在创建菜单时(即在'onCreateContextMenu'中)获得按钮。当该项目被选中时(即,在'onContextItemSelected'中),我需要按钮。 – hleroy

相关问题