【问题标题】:Android ListView setOnItemLongClickListener works but setOnItemClickListener does notAndroid ListView setOnItemLongClickListener 有效,但 setOnItemClickListener 无效
【发布时间】:2015-08-05 02:32:56
【问题描述】:

我希望当我单击一个项目时有一个行为 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 会超过 setOnItemClickListeneronItemClick 永远不会被调用,只有当我长按时才会记录该行。

在 ListView 中保存项目的 xml 有两个:

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

关于我要做什么的基本概念我错了吗?

【问题讨论】:

  • 您在您的适配器中设置了任何点击监听器?或者您的列表项中有按钮或复选框?您可以发布您的列表项 xml 和适配器代码吗?
  • 我使用的适配器没有任何类型的监听器。列表项中仅存在 2 个 TextView。
  • 代码在这里可以正常工作,可能是你的文本视图有问题,可能他们请求焦点或阻止 onClick 事件的东西
  • @SaNtoRiaN 确实,问题来自 xml。
  • @hazyred 祝你好运 :)

标签: android listview onitemclicklistener


【解决方案1】:

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

【讨论】:

  • 如果一切都失败了,我的 B 计划将是这样的 :)。不过,我想先尝试了解我在这种方法中做错了什么。
  • 我不认为你做错了什么。我隐约记得这对我来说是个问题,我尽我所能,直到我只是说忘记它并按照线程的方式进行。这样的痛苦,但据我所知,这两个答题器会发生冲突,一个不会工作。 GL!
【解决方案2】:

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

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

现在两个听众都按照我的意愿工作了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 2021-06-07
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多