4

我正在使用一个ExpandableListView lv. 这就是我所拥有的。

ExpandableListView lv=(ExpandableListView )findViewById(....);
lv.setOnChildClickListener(new ExpandableListView.OnChildClickListener(){
@Override
    public boolean onChildClick(ExpandableListView parent, View v,int gp, int cp, long id) {

        Toast.makeText(MainActivity.this, "Clicked", Toast.LENGTH_SHORT).show();
        //perform action    
        return true;
    }
});

lv.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
    @Override
    public void onCreateContextMenu(ContextMenu contextMenu, View v,ContextMenuInfo menuInfo) {     
        ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) menuInfo;
        customMenu.show(v);
        //do other stuff
        contextMenu=null;
    }
});

当我长按一个子项目时,它customMenu.show(v)被调用,当我抬起手指时,它OnClickListener被调用。类似地,在一个组项目上长按然后松开手指,它ContextmenuListener会被调用,然后该组会展开以显示子项目。这是正常行为吗?我该如何防止这种情况?

我实际上想long Click在列表项上做一些事情。返回正常true工作longClickListener(消耗点击事件)。但我还需要获取项目的 id、组和子位置,这些仅ContextMenuInfocontextmenu侦听器中提供。

4

2 回答 2

6

确保这件事

@Override
    public boolean onItemLongClick(AdapterView<?> parent, View view,
                int position, long id) {

        return true; //<-- this should be TRUE, not FALSE   
    }

正在回归true。returnfalse似乎继续调用 into 的方法onClick()

这个解决方案至少对我有用。return false当我在 eclipse 中自动生成代码时,这是我的默认设置,我没想到要更改它。

于 2015-03-27T23:34:29.037 回答
-1

设置一个全局布尔值,例如

boolean isLongClick = false;

public void onClick(View arg0) {

    if(isLongClick == false){ // this checks to see if it was long clicked
        // Perform your action here
    }
    isLongClick = false; // resetting longClick to false after bypassing action
}

public boolean onLongClick(View arg0) {
    isLongClick = true; 
    //perform other action here
    return false;
}

它的作用是运行两个动作侦听器,一个用于单击,一个用于长单击。如果用户长按该对象,它会将布尔值设置为 true,从而阻止在 onClickListener 中执行该操作,但无论如何 onClickListener 仍会触发,因此我们确保在该方法中重置布尔值,以便长按后,该项目将再次接受单次按下。

当然,这意味着您需要获取按下的项目的 id 等。但是这种方法就像一个魅力。我刚刚在一个弹出菜单的应用程序中实现了它。我希望根据用户是单按还是长按锚点来弹出两个不同的菜单。因此,如果他们快速按下它会弹出一个(打开方式)菜单,如果长按它会弹出一个菜单(共享到、编辑、删除)等。

于 2014-01-01T00:05:23.857 回答