在我的应用程序中,我动态创建了一些 View ,并且所有 View 都注册了相同的上下文菜单。
for(int j = 0; j < CELLS_IN_ROW; j++) {
MyView v = new MyView();
((Activity) context).registerForContextMenu(v);
}
/* ----------------------------------------------- */
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.cell_context_menu, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.myOption:
MyView viewClicked = ?????
doSomethingDependingOnView(viewClicked);
return true;
default:
return super.onContextItemSelected(item);
}
}
但是当单击菜单选项时,我想根据单击哪个 View 来打开上下文菜单来执行不同的操作。我该怎么做?
最佳答案
由于其参数 view,当您的 onCreateContextMenu 启动时,您拥有对 clickedView 的引用。
onCreateContextMenu(ContextMenu cM, View view,ContextMenuInfo cMI)
所以你必须在你的 Activity (或 fragment )中声明一些 View 变量, 然后你应该在 onCreateContextMenu 中初始化那个,最后你可以在 onContextItemSelected 中使用它
MyView viewClicked;
@Override
public void onCreateContextMenu(ContextMenu menu,
View view, // this is your clicked view
ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.cell_context_menu, menu);
viewClicked = view; // <---!!!
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.myOption:
viewClicked.someMethod();
doSomethingDependingOnView(viewClicked);
return true;
default:
return super.onContextItemSelected(item);
}
关于java - 如何从选择了上下文菜单选项的 View 中获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27294093/