【问题标题】:ListView doesnt fire setOnLongClickListener, only setOnItemClickListenerListView 不会触发 setOnLongClickListener,只会触发 setOnItemClickListener
【发布时间】:2011-09-30 06:02:31
【问题描述】:

我希望对 listView 进行两种点击 - onClick 和 LongClick。

我是这样实现的:

this.listViewSub = (ListView) this.findViewById(R.id.listsub);

this.listViewSub.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(final AdapterView parent, final View view, final int position,
                final long id) { ... }    });

        // listen to long click - to share texts
    this.listViewSub.setOnLongClickListener(new OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) { ... } });

但它不会触发长按。 有人知道为什么吗?

【问题讨论】:

    标签: android listview android-listview onlongclicklistener


    【解决方案1】:

    您必须启用LongClickable

    list.setLongClickable(true);
    

    list.setOnItemLongClickListener(new OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                    final int arg2, long arg3) {
    
    }
    });
    

    【讨论】:

    • 谢谢你!解决了我的问题 :) 顺便说一句 - 你不必做 setLongClickable 槽代码,当你通过 XML 确定它时它会更好:android:longClickable="true"
    • setOnItemLongClickListener 的文档说“如果这个视图不能长点击,它就变成长点击了。”
    • 确保使用setOnItemLongClickListenerNOT setOnLongClickListener
    【解决方案2】:

    @Vadim,您的列表视图的适配器是从 BaseAdapter 扩展而来的吗?如果是,那么还需要设置convertView.setLongClickable(true);在 getView() 中。

    【讨论】:

      【解决方案3】:

      对我来说,我必须在包含我的 ListView row 布局(不是 ListView 布局)的 XML 文件中设置 android:longClickable="true" 以使项目可以长按。

      【讨论】:

      • 在我为这个问题看到的许多建议的解决方案中(并且我已经尝试了所有),这是唯一一个对我有用的解决方案。
      【解决方案4】:

      onLongClick 如果回调消耗了长按,则返回 true,否则返回 false。所以如果事件被这个方法处理,则返回true。

      【讨论】:

      • 我在这个方法中添加了一个断点,它并没有停在那里..看起来它没有触发事件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-07
      相关资源
      最近更新 更多