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 при накачивании?
Ответы:
Я только что нашел решение отсюда, но путем глубокого нажатия.
Если какой-либо элемент строки списка содержит фокусируемое или интерактивное представление
OnItemClickListener
, оно не будет работать.Элемент строки должен иметь параметры , как
android:descendantFocusability = "blocksDescendants"
.Здесь вы можете увидеть пример того, как должен выглядеть ваш элемент списка. Ваш элемент списка xml должен быть ...
row_item.xml
(your_xml_file.xml
)источник
listView.setDescendantFocusability(int focus);
гдеfocus
один изViewGroup.FOCUS_BEFORE_DESCENDANTS
,ViewGroup.FOCUS_AFTER_DESCENDANTS
илиViewGroup.FOCUS_BLOCK_DESCENDANTS
Проблема в том, что ваши макеты содержат либо фокусируемые, либо кликабельные элементы. Если представление содержит фокусируемый или кликабельный элемент, OnItemCLickListener вызываться не будет.
Нажмите здесь для получения дополнительной информации.
Пожалуйста, опубликуйте один из ваших макетов xmls, если это не так.
источник
EditText
с наTextView
с, иCheckBox
было разрешено оставаться (и оставаться переключаемым) сandroid:descendantFocusability="blocksDescendants"
добавленным к моемуLinearLayout
.android:focusableInTouchMode="true"
за ряд, как только убрал, он наконец заработал! :-)Для моих списков в моих строках есть и другие вещи, которые можно нажимать, например кнопки, поэтому создание одеяла
blocksDescendants
не работает. Вместо этого я добавил строку в xml кнопки:Это удерживает кнопки от блокирования щелчков на строках, но все же позволяет кнопкам принимать щелчки.
источник
вам нужно сделать 2 шага в вашем listview_item.xml
android:descendantFocusability="blocksDescendants"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
Вот пример: listview_item.xml
источник
clickable="true
в представлении элемента сделаетonItemClick
вызов не вызываемым. Поэтому обратите внимание также на добавлениеclickable="false"
корневого представления элемента, в данном случае этоLinearLayout
используйте приведенный ниже код внутри тега кнопки в пользовательском макете строки списка
источник
android:descendantFocusability="blocksDescendants"
и блокирую эти флажки для щелчкаУ меня была такая же проблема, и я только что увидел, что случайно установил:
в моем классе CustomListViewAdapter.
Изменяя это на:
Мне удалось решить проблему. На всякий случай, если кто-то сделал ту же ошибку ...
источник
@Override public void onApplicationStart { ExplodeThisDevice(); }
Используйте Android: потомок Фокусируемость
Добавить выше в корневой макет
источник
Я решил это с помощью этого ответа
1. Добавьте следующее в линейный макет list_items.xml
android:descendantFocusability="blocksDescendants"
2.Детские представления LinearLayout в list_items.xml
источник
если у вас есть текстовые представления, кнопки или stg, которые можно нажимать или выбирать только в представлении строк
недостаточно. Вы должны установить
к вашим текстовым представлениям и
на ваши кнопки и другие фокусируемые предметы.
источник
Даже у меня была та же проблема, у меня есть флажок, сделал следующее для маскировки itemClickListener работать,
Добавлены следующие свойства к флажку,
и ItemClickListner начал работать.
Для подробного примера вы можете перейти по ссылке,
http://knowledge-cess.com/android-itemclicklistner-with-checkbox-or-radiobutton/
Надеюсь, это помогает Ура!
источник
У меня была такая же проблема, и я попробовал все упомянутые решения безрезультатно. в ходе тестирования я обнаружил, что выделение текста препятствует вызову слушателя. Таким образом, переключив его на false или удалив, мой слушатель был вызван снова.
надеюсь, это поможет тому, кто застрял как я.
источник
Добавьте это в основной макет
Запишите этот код в каждую кнопку, TextView, ImageView и т. Д., Которые имеют onClick
Надеюсь, это сработает.
источник
Два замечательных решения заключались в следующем: если ваш расширяющий ListFragment из фрагмента знает, что не
mListView.setOnItemClickListener
будет вызван до создания вашей активности, это обеспечило его установку при создании активностиГлядя на исходный код ListFragment, я наткнулся на это
onItemClickListener
Объект присоединен , и он вызываетonListItemClick()
качестве такого другого аналогичного решения, которое работает в точно так же, чтобы переопределитьonListItemClick()
источник
в моем случае ни одно из свойств макета XML не помогло.
Я просто добавляю одну строку кода следующим образом: convertView.setClickable (false);
так что в основном это то же самое, что и настройка свойств в макете XML, но это было единственное, что работает в моем случае.
Это не идеальное время, но, может быть, это поможет кому-нибудь Счастливое кодирование
источник
Я перепробовал все вышеперечисленное и НИЧЕГО не получилось.
Я решил проблему следующим образом:
Сначала я определяю пользовательскую кнопку под названием
ListButton
XML выглядит так:
Затем я определяю свой собственный
ButtonClicked
интерфейс Слушателя:Затем я использую свой собственный слушатель, как если бы он был нормальным
OnClickListener
:источник
У меня была та же проблема, я использовал стиль для своих текстов в макете строки, который имел атрибут «фокусируемый». Это сработало после того, как я его убрал.
источник
В моем случае мне пришлось удалить следующую строку из
Layout
источник
Android: атрибут autoText также делает TextView автоматически фокусируемым.
источник
Если вы хотите использовать как простой щелчок, так и длительный клик по элементам представления списка, лучший способ реализовать это - использовать контекстное меню для длинного клика. Избегайте использования setItemLongClickListener, особенно если у вас есть несколько рядов макетов для вашего списка.
источник
Столкнулся с той же проблемой, пытался часами. Если вы попробовали все вышеперечисленное, попробуйте изменить layout_width для Listview и элемента списка на match_parent из wrap_content.
источник
Все вышеперечисленное не удалось для меня. Тем не менее, я смог решить проблему (после многих часов ударов головой - Google, если вы слушаете, пожалуйста, по возможности исправьте то, с чем я столкнулся ниже, в форме ошибок компилятора)
Вы действительно должны быть осторожны с тем, какие атрибуты Android вы добавляете сюда в свой макет xml (в этом оригинальном вопросе он называется list_items.xml). Для меня проблема заключалась в том, что я переключился с представления EditText на TextView, и у меня остался бесполезный атрибут атрибута (в моем случае, inputType). Компилятор не уловил его, и кликабельность просто не сработала, когда я запустил приложение. Дважды проверьте все атрибуты, которые есть у вас в XML-узлах макета.
источник
Затем в своей деятельности используйте adapter.setOnItemClickListener () прежде чем присоединять его к представлению списка.
Скопировал из GitHub его работал для меня
источник
Для меня сработало добавление приведенного ниже кода в каждое подпредставление внутри макета моего файла row.xml:
Итак, в моем случае:
И это мой вызов setOnItemClickListener в моем подклассе Fragment:
Я получил ответ отсюда !
источник
Я решил проблему, удалив интерактивные виды из списка.
источник