我第一次在列表视图中使用GestureDetector。它对我来说很好,直到我在ListView项目上有多个onclick。我希望GestureDetector用于整个列表,但它不能用于我在ListView中的某些项目的onclick事件。
考虑我的代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/lineraMain"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="100"
android:background="#FFFFFF">
<TextView android:id="@+id/meet_time"
android:layout_width="0dp"
android:layout_height="match_parent"
android:textColor="#FFFFFF"
android:gravity="center"
android:textAppearance="?android:attr/textAppearanceSmall"
android:background="#ef3d4a"
android:textStyle="bold"
android:layout_weight="30"
android:text="@string/note"/>
<TextView android:id="@+id/textid"
android:layout_width="0dp"
android:layout_height="match_parent"
android:textColor="#FFFFFF"
android:gravity="center"
android:textAppearance="?android:attr/textAppearanceSmall"
android:background="#ef3d4a"
android:textStyle="bold"
android:layout_weight="30"
android:text="@string/note"/>
<LinearLayout android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="horizontal"
android:layout_weight="10">
<ImageView
android:id="@+id/arrow_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/down"/>
<ImageView
android:id="@+id/delete_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:src="@drawable/icon_delete_red"/>
</LinearLayout>
</LinearLayout>
对于textView的textid和meet_time我设置了onclicklistener,当我尝试在这个文本上滑动时它不起作用。对于GestureDetector,我扩展了SimpleOnGestureListener。
请给我一些建议。谢谢。
答案 0 :(得分:0)
首先,您需要了解OnTouch
事件的工作原理
首先,OnClickListener
是OnTouchListenter
的私人案例,它的作用是听取特定视图上的down
和up
触摸事件。如果触摸事件由某个侦听器“处理”,则该侦听器返回 true ,这会阻止事件传播到覆盖/包含它的更多“常规”视图。
在您的情况下,会发生OnClickListener
处理事件并且不让ListView
获取触摸事件。 您可能可以实现自己的 OnClickListener
,它只与标准的false
不同,因为它会检测到的点击次数ListView
。
您应该扩展onInterceptTouchEvent
并实施ListView
这将允许GestureDetector
“看到”触摸事件(您可以通过public class MyListView extends ListView {
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
//run through your GestureDetector
if (ev.getActionMasked() != ACTION_DOWN && yourGestureDetector.onTouchEvent(ev))
{
//you have detected your gesture
//....
}
return false; //return false so that the child TextViews will continue to get touch events
}
}
运行并相应处理)
{{1}}
希望这有帮助。