2012-03-02 4 views
1

私は実装しようとしているコードのいくつかのバリエーションを試しましたが、なぜ物事が起こっているのか混乱しています。私は誰かがそれを私に説明できることを望んでいる。タッチ/クリックイベントの伝播ルール

私は、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に戻るのを防ぐのですか?

ご協力いただきありがとうございます。

答えて

0

リストビューでeditTextが選択されるのは正常な動作です。多くの場合、人々はリストビューの行にテキストを入力する必要があります。

EditText.setOnTouchListener(OnTouchListner)またはEditText.setOnFocusChangeListener(OnFocusChangeListener)のようなリスナーをEditTextに設定し、リスナーで次の画面に移動できます。

別のオプションは、EditTextではなく、EditTextのように見えるドロアブルリソースを使用することです。