Я пробовал некоторые варианты кода, который я пытаюсь реализовать, и я немного смущен, почему все происходит так, как они выглядят. Я надеюсь, кто-нибудь сможет мне это объяснить.Правила распространения событий touch/click
У меня есть файл макета с различными элементами, включая 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>
Я поставил OnItemClickListener в ListView (в) для прослушивания события прикосновения, чтобы перейти к следующему экрану. Однако, когда я выхожу за пределы представления EditText, метод onItemClick() не вызывается.
Я рассмотрел тот факт, что EditText в элементе ListView вызывал захват и нераспространение событий ListView. Я вынул EditText из вышеуказанного файла макета и вызвал метод onItemClick(), как и ожидалось.
Это заставило бы меня поверить, что текстовые элементы в виде редактирования текста EditText могут получать события click. Это было правильно. Это сработало. Это также заставило меня поверить, что предки LinearLayouts из EditText НЕ будут получать события кликов, если я выйду за пределы представления EditText. Это не тот случай. Как родительский LinearLayout, содержащий EditText, так и grandparent LinearLayout, который содержит весь элемент ListView, оба получили события кликов всякий раз, когда я выходил за пределы представления EditText. Однако щелчок внутри представления EditText не распространялся на своих предков. Именно это я и надеялся.
Итак, если виджеты-предки могут получать события кликов за пределами EditText, почему же родительский ListView не получает событие для запуска метода onItemClick()? Почему EditText предотвращает распространение событий в ListView?
Заранее благодарю вас за помощь.