Android ListView setOnItemLongClickListener 有效但 setOnItemClickListener 无效

Android ListView setOnItemLongClickListener works but setOnItemClickListener does not

我希望在单击某个项目时有一个行为 x,在我按住同一项目时有一个行为 y。我似乎可以做其中之一,但不能同时做。

所以我有这个列表视图 lv。 在 onCreate 我给它

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.v(TAG, "click position: " + position);
        }
    });

当我单击列表视图中的任何项目时,我会收到日志。

假设我删除了 setOnItemClickListener。现在我添加:

lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        public boolean onItemLongClick(AdapterView<?> parent, View view,int position, long id) {
            Log.v(TAG, "long click position: " + position);
            return true;
        }
    });

当我长按(按住 3 秒)时,我得到了日志。耶。

但是,如果我尝试将两者结合使用,setOnItemLongClickListener 就会使 setOnItemClickListener 黯然失色。 onItemClick 永远不会被调用,只有当我长按时才会记录该行。

在 ListView 中保存项目的 xml 有:

android:longClickable="true"
android:clickable="true"

我做错了什么基本概念?

如果一切都失败了,您可以在列表视图上使用 onTouch 并使用 2 个线程来处理长触摸和短触摸。它变得更加痛苦,但这就是我构建 dragNdrop 列表视图并滑动以删除列表视图的方式。我希望这能让你开始解决这个问题。

具有讽刺意味的是,我从包含我的 ListView 项目的 xml 中删除了以下内容:

android:longClickable="true"
android:clickable="true"

现在两个听众都按照我的预期工作了!