防止在showContextMenu上调用onItemLongClick

时间:2014-08-27 14:23:12

标签: android listview onclicklistener onitemlongclicklistener

我正在使用自定义ListView,它实现拖动元素以重新排序它们。通过长按启动重新排序。

我还想通过一次短暂的点击打开列表中每个元素的上下文菜单,如下所示(包含列表视图的片段中的代码):

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            mainFragment.this.getActivity().openContextMenu(view);
        }
    });

问题是,内部Android显然通过调用视图onItemLongClicksource)的OnItemLongClickHandler方法打开上下文菜单,这显然会导致拖动行为启动。

我怎么能绕过这种行为?

1 个答案:

答案 0 :(得分:2)

我明白了。您可以在onItemClick中将私有布尔变量设置为true,并且如果此布尔变量为true,则禁止onItemLongClick中的所有行为:

setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View v, int pos, long id) {
            itemClicked = true;
            parent.showContextMenuForChild(v);
        }
    });
setOnItemLongClickListener(new OnItemLongClickListener() {
        public boolean onItemLongClick(AdapterView<?> parent, View view, int pos, long id) {
    if(!itemClicked) {
        //dragging logic here
    }
    itemClicked = false;
相关问题