我正在使用自定义ListView,它实现拖动元素以重新排序它们。通过长按启动重新排序。
我还想通过一次短暂的点击打开列表中每个元素的上下文菜单,如下所示(包含列表视图的片段中的代码):
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mainFragment.this.getActivity().openContextMenu(view);
}
});
问题是,内部Android显然通过调用视图onItemLongClick
(source)的OnItemLongClickHandler
方法打开上下文菜单,这显然会导致拖动行为启动。
我怎么能绕过这种行为?
答案 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;