Intereting Posts
Как сделать phonegap window.location.href не запускать Chrome на Android Кордова – отказывается выполнять обработчик события inline, поскольку он нарушает следующий контент. Политика безопасности Преобразование в формат Dalvik завершилось ошибкой с ошибкой 1 со страшным сообщением в представлении «Консоль» Ошибка: (27, 13) Не удалось решить: com.google.firebase: firebase-core: 9.8.0 Создание WAV-файла из необработанных данных PCM с помощью Android SDK Java.lang.NoClassDefFoundError: javax.activation.DataHandler в android Очистить содержимое списка? Play Store Бета-тестирование не работает API-интерфейс API Android v2 Производительность Android ContentProvider Как преобразовать образцы pcm в массив байтов как числа с плавающей запятой в диапазоне от -1.0 до 1.0 и обратно? Android заменит текущий фрагмент другим фрагментом Загрузка и сохранение изображений с помощью Picasso Поддержка пользовательских Multi Language Автономный тестовый проект для проекта библиотеки на Android

OnItemCLickListener не работает в listview

Код класса Activity :

 conversationList = (ListView)findViewById(android.R.id.list); ConversationArrayAdapter conversationArrayAdapter=new ConversationArrayAdapter(this, R.layout.conversation_list_item_format_left, conversationDetails); conversationList.setAdapter(conversationArrayAdapter); conversationList.setOnItemClickListener(new AdapterView.OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { Log.d("test","clicked"); } }); 

Функция getView в классе Adapter :

 if (v == null) { LayoutInflater vi = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); if(leftSideMessageNumber.equals(m.getTo())) { v = vi.inflate(R.layout.conversation_list_item_format_left, null); } else { v = vi.inflate(R.layout.conversation_list_item_format_right, null); } } 

Есть ли проблема с использованием двух xmls при раздувании?

Solutions Collecting From Web of "OnItemCLickListener не работает в listview"

Я только что нашел решение отсюда .. но путем глубокого нажатия …

Если какой-либо элемент строки списка содержит фокусируемое или кликабельное представление, то OnItemClickListener не будет работать.

Элемент строки должен иметь параметр как android:descendantFocusability="blocksDescendants" .

Здесь вы можете увидеть пример, как выглядит ваш элемент списка. Ваш элемент списка xml должен быть … row_item.xml (your_xml_file.xml)

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:baselineAligned="false" android:descendantFocusability="blocksDescendants" android:gravity="center_vertical" > // your other widgets here </LinearLayout> 

Проблема заключается в том, что ваши макеты содержат либо настраиваемые, либо интерактивные элементы. Если представление содержит либо настраиваемый, либо кликабельный элемент, OnItemCLickListener не будет вызываться.

Нажмите здесь для получения дополнительной информации.

Пожалуйста, разместите один из ваших макетов xmls, если это не так.

Для моих списков в моих строках есть другие вещи, которые можно щелкнуть, например кнопки, так что при использовании ползунков blockDescendants не работает. Вместо этого я добавляю строку в xml кнопки:

  android:focusable="false" 

Это заставляет кнопки блокировать щелчки по строкам, но все же позволяет кнопкам делать клики тоже.

Вам нужно сделать 2 шага в вашем listview_item.xml

  1. Установите корневую компоновку с помощью: android:descendantFocusability="blocksDescendants"
  2. Задайте любое фокусное или кликабельное представление в этом элементе с помощью:
    android:clickable="false"
    android:focusable="false"
    android:focusableInTouchMode="false"

Вот пример: listview_item.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:layout_marginTop="10dp" android:paddingLeft="10dp" android:paddingRight="10dp" android:gravity="center_vertical" android:orientation="vertical" android:descendantFocusability="blocksDescendants"> <RadioButton android:id="@+id/script_name_radio_btn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textStyle="bold" android:textColor="#000" android:padding="5dp" android:clickable="false" android:focusable="false" android:focusableInTouchMode="false" /> </LinearLayout> 

Используйте нижеприведенный код внутри тега кнопки в пользовательском расположении строк списка

  android:focusable="false" android:clickable="false" 

У меня была такая же проблема, и я просто увидел, что случайно установил:

 @Override public boolean isEnabled(int position) { return false; } 

В моем классе CustomListViewAdapter.

Изменяя это на:

 return true; 

Мне удалось решить проблему. На всякий случай, если кто-то совершил ту же ошибку …

Если у вас есть текстовые изображения, кнопки или stg кликабельны или выбираются только в вашем представлении строк

 android:descendantFocusability="blocksDescendants" 

недостаточно. Вы должны установить

 android:textIsSelectable="false" 

К вашим текстам и

 android:focusable="false" 

К вашим кнопкам и другим элементам фокусировки.

Даже у меня была такая же проблема, у меня есть флажок, я сделал следующее для маскировки itemClickListener,

Добавлены следующие свойства к флажку,

 android:focusable="false" android:focusableInTouchMode="false" android:clickable="false" 

И ItemClickListner начал работать.

Для подробного примера вы можете перейти по ссылке,

http://knowledge-cess.com/android-itemclicklistner-with-checkbox-or-radiobutton/

Надеюсь, это поможет Cheers !!

Использовать android: descendantFocusability

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="80dip" android:background="@color/light_green" android:descendantFocusability="blocksDescendants" > 

Добавить выше в корневой макет

Я решил это с помощью этого ответа

1. Добавьте в Linear Layout следующее android:descendantFocusability="blocksDescendants"

2.Создание форм LinearLayout в list_items.xml

  android:focusable="false" 

У меня была такая же проблема, и я попробовал все упомянутые решения безрезультатно. Через тестирование я обнаружил, что выбор текста позволяет предотвратить вызов слушателя. Поэтому, переключив его на false или удалив, мой слушатель снова вызвался.

 android:textIsSelectable="false" 

Надеюсь, это поможет кому-то, кто застрял как я.

Два удивительных решения заключались в том, что, если вы расширяете ListFragment из фрагмента, знаете, что mListView.setOnItemClickListener будет вызван до создания вашей активности, это обеспечило бы его настройку, когда была создана активность

 @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long rowId) { // Do the onItemClick action Log.d("ROWSELECT", "" + rowId); } }); } 

Рассматривая исходный код для ListFragment, я столкнулся с этим

 public class ListFragment extends Fragment { ........................................... ................................................ final private AdapterView.OnItemClickListener mOnClickListener = new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View v, int position, long id) { onListItemClick((ListView)parent, v, position, id); } }; ................................................................ ................................................................ public void onListItemClick(ListView l, View v, int position, long id) { } } 

Объект onItemClickListener подключен, и он вызывает onListItemClick() Подобным же другим аналогичным решением, которое работает точно так же, является переопределение onListItemClick()

 @Override public void onListItemClick(ListView l, View v, int position, long rowId) { super.onListItemClick(l, v, position, id); // Do the onItemClick action Log.d("ROWSELECT", "" + rowId); } 

Я пробовал все выше, и НИЧЕГО не работал.

Я решил проблему следующим образом:

Сначала я определяю пользовательскую кнопку, называемую ListButton

 public class ListButton extends android.widget.Button { private ButtonClickedListener clickListener; public ListButton(Context context) { this(context, null); } public ListButton(Context context, AttributeSet attrs) { this(context, attrs, 0); } public ListButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public void setClickListener(ButtonClickedListener listener) { this.clickListener = listener; } @Override public boolean isInTouchMode() { return true; } @Override public boolean onTouchEvent(MotionEvent event) { return false; } @Override public boolean dispatchTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_UP: eventClicked(); break; case MotionEvent.ACTION_CANCEL: break; case MotionEvent.ACTION_MOVE: break; default : } return true; } private void eventClicked() { if (this.clickListener!=null) { this.clickListener.ButtonClicked(); } } } 

XML выглядит так:

 <dk.example.views.ListButton android:id="@+id/cancel_button" android:layout_width="125dp" android:layout_height="80dp" android:text="Cancel" android:textSize="20sp" android:layout_margin="10dp" android:padding="2dp" android:background="#000000" android:textColor="#ffffff" android:textStyle="bold" /> 

Затем я определяю свой собственный интерфейс ButtonClicked Listener:

 public interface ButtonClickedListener { public void ButtonClicked(); } 

Затем я использую свой собственный слушатель так же, как если бы это был обычный OnClickListener :

 final ListButton cancelButton = (ListButton) viewLayout.findViewById(R.id.cancel_button); cancelButton.setClickListener(new ButtonClickedListener() { @Override public void ButtonClicked() { //Do your own stuff here... } }); 

Если вы хотите использовать как простой щелчок, так и длинный щелчок по элементам списка, лучший способ реализовать это будет использовать контекстное меню для длительного клика. Избегайте использования setItemLongClickListener, особенно если у вас есть несколько макетов строк для вашего списка.

Столкнулась с такой же проблемой, проработав несколько часов. Если вы попробовали все вышеперечисленное, попробуйте изменить layout_width из списка и элемента списка в match_parent из wrap_content.

Все вышеизложенное не помогло мне. Тем не менее, я смог решить проблему (после многих часов ударов по голове – Google, если вы слушаете, пожалуйста, подумайте о том, чтобы зафиксировать то, что я столкнулся ниже, в форме ошибок компилятора, если это возможно)

Вы действительно должны быть осторожны с тем, какие атрибуты Android вы добавляете в свой XML-макет здесь (в этом оригинальном вопросе он называется list_items.xml). Для меня проблема заключалась в том, что я переключился с представления EditText на TextView и оставил атрибут cruft от изменения (в моем случае, inputType). Компилятор не поймал его, и кликабельность просто не удалась, когда я пошел запускать приложение. Дважды проверьте все атрибуты, которые у вас есть в узлах xml макета.