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

Код classа 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 в classе 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 при раздувании?

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

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

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

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

  // your other widgets here  

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

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

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

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

     

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

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

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

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

в моем classе CustomListViewAdapter.

Изменив это на:

 return true; 

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

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

  

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

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

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

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

  android:focusable="false" 

если у вас есть текстовые заметки, кнопки или 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 !!

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

 android:textIsSelectable="false" 

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

Два удивительных решения заключались в том, что если ваш расширенный ListFragment из fragmentа знает, что 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); } 
  1. Добавьте это в основной макет

     android:descendantFocusability="blocksDescendants" 
  2. Напишите этот код в каждую кнопку, Textview, ImageView и т. Д., Которые имеют onClick

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

Надеюсь, он сработает.

в моем случае ни одно из свойств макета xml не помогло.

Я просто добавляю одну строку кода следующим образом: convertView.setClickable (false);

 @NonNull @Override public View getView(final int position, View convertView, @NonNull ViewGroup parent) { ViewHolder viewHolder; if (convertView == null || convertView.getTag() == null) { LayoutInflater inflater = LayoutInflater.from(context); convertView = inflater.inflate(R.layout.my_layout_id, parent, false); viewHolder = new ViewHolder(convertView); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } ... convertView.setClickable(false); return convertView; } 

поэтому в основном он делает то же самое, что настраивать свойства в макете xml, но это единственное, что работает в моем случае.

Это не идеальный выбор времени, но, возможно, это поможет кому-то Счастливое кодирование

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

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

Сначала я определяю пользовательскую кнопку, называемую 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 выглядит так:

  

Затем я определяю свой собственный интерфейс 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 из списка Listview и элемента списка match_parent из wrap_content.

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

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

Android: атрибут autoText также делает AutoView автоактивным.

  • Как показать алфавитные буквы на стороне Android ListView
  • Android SDK 22 - проблемы с визуализацией SearchView
  • Элемент списка ListView с помощью настраиваемого селектора
  • OnItemClickListener и OnClickListener не работают в ListView
  • ListView с OnItemClickListener android
  • настраиваемый метод getView адаптера listview, который вызывается несколько раз и не имеет когерентного порядка
  • Как сделать дополнительный просмотр float в UICollectionView в виде заголовков секций в обычном стиле UITableView
  • В чем разница между ViewData и ViewBag?
  • Отображение изображения Qt jpg
  • Как показать кнопку в конце Android ListView
  • Какова основная цель методов setTag () getTag () View?
  • Давайте будем гением компьютера.