java - 如何从选择了上下文菜单选项的 View 中获取?

标签 java android menu contextmenu

在我的应用程序中,我动态创建了一些 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/

相关文章:

java - 为什么要将 main() 放在专用类中?

java - 字符串的switch语句

android - 为什么有些 Eclipse Android 项目是灰色的?

java - 如何根据另一个 Activity 设置按钮不可见

像 camscanner 这样的 Android 裁剪图像

java - 限制 SQL Server 2005 中的 SELECT 语句

java - PostgreSQL 查询在 pgAdmin 中有效,但在 Java EclipseLink 中无效

android - 使用 TabLayout 时以黑色主题显示的工具栏溢出菜单

css - WordPress TwentyTen 菜单 : how to CSS-select sub-menus in a specific position?

javascript - 单击隐藏中的链接时关闭移动菜单