Java 如何获取从哪个上下文菜单选项中选择的视图?
在我的应用程序中,我动态创建了一些视图,所有视图都注册了相同的上下文菜单Java 如何获取从哪个上下文菜单选项中选择的视图?,java,android,menu,contextmenu,Java,Android,Menu,Contextmenu,在我的应用程序中,我动态创建了一些视图,所有视图都注册了相同的上下文菜单 for(int j = 0; j < CELLS_IN_ROW; j++) { MyView v = new MyView(); ((Activity) context).registerForContextMenu(v); } /* ----------------------------------------------- */ @Override public void o
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);
}
}
for(int j=0;j<行中的单元格;j++){
MyView v=新的MyView();
((活动)上下文);
}
/* ----------------------------------------------- */
@凌驾
public void onCreateContextMenu(ContextMenu菜单,视图v,ContextMenu.ContextMenuInfo菜单信息){
super.onCreateContextMenu(menu,v,menuInfo);
MenuInflater MenuInflater=getMenuInflater();
菜单平坦。充气(右菜单。单元格上下文菜单,菜单);
}
@凌驾
公共布尔值onContextItemSelected(MenuItem项){
开关(item.getItemId()){
案例R.id.M选项:
MyView视图单击=?????
doSomethingDependingOnView(单击视图);
返回true;
违约:
返回super.onContextItemSelected(项目);
}
}
但是,当单击菜单选项时,我想根据单击哪个视图打开上下文菜单来执行不同的操作。我该怎么做?试试这个:
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.myOption:
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
MyView viewClicked = (MyView) info.targetView;
doSomethingDependingOnView(viewClicked);
return true;
default:
return super.onContextItemSelected(item);
}
这不是最好的方法,但似乎是唯一有效的方法:
// create a global variable
Button clickedButton = null;
// save the button
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
clickedButton = (Button) v;
}
// do something with the clickedButton
@Override
public boolean onContextItemSelected(MenuItem item) {
doSomethingDependingOnView(clickedButton);
return true;
}
当onCreateContextMenu启动时,由于其参数view,您在clickedView上有了引用 onCreateContextMenu(ContextMenu cM,ViewView,ContextMenuInfo cMI) 因此,您必须在活动(或片段)中声明一些视图变量, 然后您应该在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; // <---!!!
}MyView v=新的MyView();v、 setID(j);您将从viewClicked.getId()@koutuk:no在Switch语句中获得您的id。。。请参阅编辑的代码。如何点击查看?它未初始化…最终视图组ViewGroup=(ViewGroup)((ViewGroup)this.findviewbyd(android.R.id.content)).getChildAt(0);viewGroup.addView(v);尝试添加视图,然后为每个视图设置单击列表器GetMenuInfo()返回空值。。。我放弃了。我将在视图类中使用onLongClickListener和DialogBuilder来完成这项工作。
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.myOption:
viewClicked.someMethod();
doSomethingDependingOnView(viewClicked);
return true;
default:
return super.onContextItemSelected(item);
}