私は実装しようとしているコードのいくつかのバリエーションを試しましたが、なぜ物事が起こっているのか混乱しています。私は誰かがそれを私に説明できることを望んでいる。タッチ/クリックイベントの伝播ルール
私は、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()を設定します。しかし、EditTextビューの外側をクリックすると、onItemClick()メソッドが呼び出されていません。
私は、ListView項目内のEditTextがListViewのイベントがキャッチされ、伝播されないことが原因となったという事実を考慮しました。上記のレイアウトファイルからEditTextを取り出し、onItemClick()メソッドが期待通りに呼び出されました。
これは、EditTextビューの兄弟TextViewがクリックイベントを受け取る可能性があると私に信じさせます。これは正しかった。それはうまくいった。また、EditTextビューの外をクリックした場合、EditTextの先祖LinearLayoutsがクリックイベントを受け取らないと私は考えました。これはそうではありません。 EditTextを保持する親LinearLayoutと、ListViewアイテム全体を保持する祖父母LinearLayoutの両方が、EditTextビューの外側をクリックするたびにクリックイベントを受け取りました。ただし、EditTextビュー内をクリックしても、その祖先には伝播しませんでした。それが私が望んでいたものです。
祖先ウィジェットはのEditText外でクリックイベントを受信することが可能であるならば、なぜ、その後、onItemClick()メソッドをトリガーするイベントを受信していない親のListViewのですか?なぜEditTextはイベントがListViewに戻るのを防ぐのですか?
ご協力いただきありがとうございます。