我已经尝试了一些我正在尝试实现的代码的变体,我对它们为什么会发生的方式感到有些困惑。我希望有人可以向我解释。
我有一个包含各种元素的布局文件,包括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?
提前感谢您的帮助。
答案 0 :(得分:0)
在listview中选择editText是正常的行为。在许多情况下,人们希望将文本输入到列表视图行中。
您可以为EditText
设置一个监听器,例如EditText.setOnTouchListener(OnTouchListner)
或EditText.setOnFocusChangeListener(OnFocusChangeListener)
,然后在您的监听器中移动到下一个屏幕。
另一个选择是使用一个看似EditText
而不是真实EditText
的可绘制资源。