android - 阻止上下文菜单出现

时间:2014-02-03 00:30:29

标签: android contextmenu block

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的位置,看起来就像是按下了它。

我还尝试在拖动事件中取消注册并重新注册上下文菜单..但是也没有用。菜单一直出现

是否有更有效的方法来阻止上下文菜单出现并阻止列表项出现???

1 个答案:

答案 0 :(得分:0)

看起来覆盖onPrepareOptionsMenu方法可能对您有用。

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

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