触摸/点击事件的传播规则

时间:2012-03-02 17:12:50

标签: android listview onclick android-edittext

我已经尝试了一些我正在尝试实现的代码的变体,我对它们为什么会发生的方式感到有些困惑。我希望有人可以向我解释。

我有一个包含各种元素的布局文件,包括ListView。 ListView项的布局文件如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:background="#ffffff"
              android:orientation="vertical">
    <LinearLayout android:layout_width="fill_parent"
                  android:layout_height="wrap_content"
                  android:background="#ffffff">
        <TextView android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_weight="1"
                />
        <TextView android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_weight="1"
                />
    </LinearLayout>
    <LinearLayout android:layout_width="fill_parent"
                  android:layout_height="wrap_content"
                  android:background="#ffffff">
        <TextView android:id="@+id/topicGoalsTextView"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_weight="1"
                />
        <EditText android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                />
        <ImageView android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_gravity="center"
                   android:layout_marginRight="5dp"
                   android:src="@drawable/chevron"
                />
    </LinearLayout>
</LinearLayout>

我将ListView的OnItemClickListener()设置为侦听触摸事件以转到下一个屏幕。但是,当我在EditText视图外部单击时,不会调用onItemClick()方法。

我认为ListView项中的EditText导致ListView事件被捕获而不是传播。我从上面的布局文件中取出了EditText,并按预期调用了onItemClick()方法。

这会让我相信EditText视图的兄弟TextViews可以接收点击事件。这是对的。那很有效。它还让我相信,如果我在EditText视图外单击,EditText的祖先LinearLayouts将不会收到点击事件。不是这种情况。每当我在EditText视图外部单击时,持有EditText的父LinearLayout和保存整个ListView项的祖父LANL都会收到点击事件。但是,单击EditText视图内部并不会传播到其祖先。这就是我所希望的。

因此,如果祖先小部件能够在EditText之外接收单击事件,那么为什么父ListView没有接收到触发onItemClick()方法的事件?为什么EditText会阻止事件传播回ListView?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在listview中选择editText是正常的行为。在许多情况下,人们希望将文本输入到列表视图行中。

您可以为EditText设置一个监听器,例如EditText.setOnTouchListener(OnTouchListner)EditText.setOnFocusChangeListener(OnFocusChangeListener),然后在您的监听器中移动到下一个屏幕。

另一个选择是使用一个看似EditText而不是真实EditText的可绘制资源。