我正在创建具有上下文菜单的动态按钮视图。当选择一个上下文菜单项时,我希望检索触发上下文菜单的按钮视图。
这是我创建按钮的方法:
这是我创建上下文菜单的方法:
这是我如何处理所选项目的方式:
问题在于"(AdapterContextMenuInfo) item.getMenuInfo()"返回null,即没有有关该项的额外信息。我原本期望在info.targetView中获得Button视图。显然,这仅适用于ListView,因为AdapterView负责填充此额外信息。
我想我应该在"onCreateContextMenu"中做些什么以附加此信息。非常欢迎提供一个附加此信息的示例代码。
谢谢。
这是我创建按钮的方法:
// 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"中做些什么以附加此信息。非常欢迎提供一个附加此信息的示例代码。
谢谢。
onContextItemSelected
中获取用于创建上下文菜单的“Button”? - hleroyonCreateContextMenu
中)获取按钮。但我需要在选择项目时(即在onContextItemSelected
中)获取按钮。 - hleroypublic View lastContextMenuButton
(或public Button
),然后在onContextItemSelected
中使用lastContextMenuButton
。 - PhilOnCreateContextMenu
中设置菜单信息,然后通过item.getMenuInfo()在onContextItemSelected
中获取信息。有一个内部类(com.android.internal.view.menu.MenuBuilder
)有一个setCurrentMenuInfo
方法。...但这是内部的。 - hleroymenuInfo
是null
。Android 文档说:“menuInfo
关于应显示上下文菜单的项目的额外信息。此信息将根据 v 的类而异。” 当 v 是ListView
时,menuInfo 方法是可行的。但当它是一个Button
时,它不起作用。无论如何,我已经按照您的建议将 v 保存到本地变量public View lastContextMenuButton
中,并且我对此感到满意。我将此问题标记为已解决。 - hleroy