【问题标题】:android - block context menu from appearingandroid - 阻止上下文菜单出现
【发布时间】:2014-02-03 08:36:57
【问题描述】:

我有一个由 GoogleMusic 提供的带有 TouchInterceptor 的可排序 ListView,可以在拖动时重新排序列表项。我还为此 ListView 注册了一个 ContextMenu。问题是拖动一个项目来改变它的位置被系统认为是长按,并且上下文菜单在它不应该出现的时候出现。我的第一个想法是在调用 onDrag() 时将布尔变量设置为 true,在拖动停止时设置为 false,然后像这样设置 onCreateContextMenu:

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        if (v.getId()==R.id.listView1 && !drag) {
            AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
            String title = data[info.position];
            menu.setHeaderTitle(title);
            String[] menuItems = getResources().getStringArray(R.array.actions_menu); 
            for (int i = 0; i<menuItems.length; i++) {
                menu.add(Menu.NONE, i, i, menuItems[i]);
            }
        }
    }

效果不太好,所以我在拖动结束后使用 handler.postDelayed() 设置了 drag=false。这在大多数情况下都可以正常工作,但会保留开始拖动的 ListView 的位置,看起来像是被按下了。

我还尝试在拖动事件中取消注册和重新注册上下文菜单..也没有工作。菜单不断出现

有没有更有效的方法来阻止上下文菜单出现并阻止列表项出现被选中??

【问题讨论】:

    标签: android contextmenu block


    【解决方案1】:

    看起来重写 onPrepareOptionsMenu 方法可能对您有用。

    我在以下与您相似的问题中发现了这一点:

    Android: How to enable/disable option menu item on button click?

    【讨论】:

    • 这仍然会显示菜单...它只是空的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多