2012-03-02 3 views
1

Я пробовал некоторые варианты кода, который я пытаюсь реализовать, и я немного смущен, почему все происходит так, как они выглядят. Я надеюсь, кто-нибудь сможет мне это объяснить.Правила распространения событий 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?

Заранее благодарю вас за помощь.

ответ

0

Это нормальное поведение для редактирования текста в списке. Во многих случаях люди хотят вводить текст в строку списка.

Вы можете установить слушателя для EditText, такого как EditText.setOnTouchListener(OnTouchListner) или EditText.setOnFocusChangeListener(OnFocusChangeListener), а затем в вашем слушателе вы можете перейти к следующему экрану.

Еще один вариант - просто использовать ресурс, который может быть использован как EditText, а не реальный EditText.

Смежные вопросы