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”中添加一些内容来附加这些信息。附上这些信息的示例代码将非常受欢迎。
感谢
菲尔,我怎么能得到用于创建上下文菜单到'onContextItemSelected'的'Button'? – hleroy
@hleroy,它已经在那里。当你为上下文菜单注册一个'View'(比如'Button'):'registerForContextMenu(myButton);'时,你可以点击按钮来打开一个上下文菜单。然后,在'onCreateContextMenu(ContextMenu菜单,View v,ContextMenuInfo menuInfo)'中,'View v'是按钮。你可以检查被选中的视图是否是某个按钮,如:if(v == myButton){do something; }' – Phil
嗨菲尔,我明白我可以在创建菜单时(即在'onCreateContextMenu'中)获得按钮。当该项目被选中时(即,在'onContextItemSelected'中),我需要按钮。 – hleroy