Пользовательский щелчок по элементу списка не вызывает listview.onclicklistener
Мой первый вопрос здесь. Пожалуйста, успокойся на мне.
у меня есть ListView
с onItemClickListener
реализованы.
У меня также есть пользовательский список элементов Android, состоящий из RelativeLayout
с двумя перекрывающимися детьми (LinearLayout).
Когда я нажимаю на ListItem, он не вызывает ListView.onClickListrener
код. Это происходит только в том случае, если пользовательский listItem имеет 2 перекрывающихся дочерних элемента. Если есть только один, все идет хорошо.
Почему это происходит? Заранее большое спасибо, это сводит меня с ума.
custom_list_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="100dp"
>
<LinearLayout
android:id="@+id/layout_one"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
...
</LinearLayout>
<LinearLayout
android:id="@+id/layout_two"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<Button ...>
</LinearLayout>
</RelativeLayout>
В MainActivity.java:
mMainListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)
{
...//code reachable only when customListItem has only one child
});
Я нашел свою проблему
Проблема заключалась в том, что в пользовательском представлении listItem я добавил кнопку Button, которая сфокусировалась на элементе listItem.
Извините за неоднозначный вопрос.
1 ответ
Даже с интерактивными виджетами в вашем пользовательском элементе списка, вы все равно сможете правильно запускать onItemClick
слушатель по настройке
android:focusable="false"
android:focusableInTouchMode="false"
на всех ваших интерактивных виджетах (например, кнопки, флажки). По некоторым причинам, это не похоже на работу с ImageButton
хоть.
Если это все еще не работает, рассмотрите возможность добавления прослушивателя к одному или обоим из LinearLayouts при создании элементов списка в вашем адаптере.