在getView()中设置单击侦听器后,ListView中的项目不能长时间单击

时间:2011-05-02 09:32:58

标签: android android-listview

我已经四处寻找并且没有提出解决方案(可能没有使用正确的关键字)。

所以,我有一个自定义ListView,当项目被长按时,它的项目可以被拖动。在其项目中,有一个包含两个TextView的ImageView和LinearLayout。单击LinearLayout或ImageView时将执行操作。

为此,我在DragListView上使用了setOnItemLongClickListener,它扩展了ListView,用于启动拖动操作,而onInterceptTouchEvent用于管理拖动操作。

然后,我构建了一个扩展BaseAdapter的自定义适配器并覆盖其getView()以实现行中的子项。 LinearLayout和ImageView已经设置了setOnClickListener。

问题是,LinearLayout和ImageView能够完成它们的工作,但是没有调用onItemLongClick。

getView();

中的监听器
    holder.delete.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
//Do something
}

对于项目长按(拖动启动器)

setOnItemLongClickListener(new OnItemLongClickListener() {              

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

非常感谢!

2 个答案:

答案 0 :(得分:2)

我认为手势检测器是处理事件的方法之一。 但是,通常情况下,当我们想要检测不是长按的手势时,会使用手势检测器。

未调用onItemLongClick的原因是onClickListener可能会使用触摸事件。 因此,如果要处理onItemLongClick,请拦截触摸事件并将其分发给您要处理的视图。

您可以在链接后找到更多详细信息。 http://developer.android.com/guide/topics/ui/ui-events.html

答案 1 :(得分:0)

好的,我自己找到了解决方案。 我创建了一个手势检测器来检测长按,而不是使用onItemLongClickListener。然后我覆盖dispatchTouchEvent并强制扫描长按,然后返回super.dispatchTouchEvent和其他触摸事件。 建议仍然欢迎!