Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取从哪个上下文菜单选项中选择的视图?_Java_Android_Menu_Contextmenu - Fatal编程技术网

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);
}