Android:对具有复杂行的ListView进行fling检测

时间:2010-11-20 23:26:11

标签: android listview ontouchlistener

亲爱的Android黑客,我附加了一个gestureListener识别flings到ListView。 ListView的行包含LinearView和一些TextView。不幸的是,当它在其中一个TextViews上启动时,未检测到fling:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="#000000" >
        <TextView
            android:id="@+id/author"
            android:textSize="14sp"
            android:textColor="#ffffff"
            android:textStyle="bold"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
        <TextView
            android:id="@+id/date"
            android:textSize="11sp"
            android:textColor="#eeeeee"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="right"/>
    </LinearLayout>
    <TextView
        android:id="@+id/text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingTop="5dp"
        android:paddingRight="5dp"
        android:paddingLeft="5dp"
        android:textColor="#333333"

        android:paddingBottom="5dp"
        android:textSize="14sp"
        android:layout_weight="2"/>
</LinearLayout>

所以,当我开始在水平LinearLayout上运行时,一切正常,但是当我在底部的TextView上启动它时,没有任何反应。它包含可编辑的文本,如果这可能是问题...正如所说,监听器附加到ListView本身。

如果有人可以提供帮助,我会很高兴的!

Jan Oliver

1 个答案:

答案 0 :(得分:3)

您的可编辑TextView正在从true返回onTouch(),以防止事件被视图层次结构中较高的LinearLayout处理。

没有什么可以阻止您将自定义OnTouchListener附加到TextView以覆盖此内容并将事件传递给现有GestureDetector

textView.setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View arg0, MotionEvent ev) {             
        return gestureDetector.onTouchEvent(ev);
    }           
};