Intereting Posts
Android и Eclipse 2 разных версии одного и того же приложения Перемещение изображения с сенсорным событием Типированный массив должен быть переработан после использования с #recycle () Запуск активности из службы на экране блокировки включает экран, но не показывает активность Выбор времени и даты для выбора даты и времени в андроиде Как установить запрос SMS по умолчанию для KitKat Упаковка портативного и переносимого Android-приложения вместе с CLI Скрытие клавиатуры с помощью кнопки BACK Как использовать runOnUiThread, не получая ошибку компилятора «не могу сделать статическую ссылку на нестационарный метод» Сохранение видеозаписи в режиме реального времени на SD-карте с помощью Local Socket в Android – Видео не воспроизводится Как использовать библиотеку ZXing без установки приложения barcodescanner Как начать действие с набором анимации полностью программно Странная ошибка в R.java, даже после очистки проекта: «Подчеркивания могут использоваться только с уровнем 1,7 или выше» Пожалуйста, объясните Array Adapters и их назначение. Еще лучше Файлы DDMS не найдены Ошибка

Android – ListView не получает OnItemClick для текстового просмотра с интерактивными ссылками

У меня есть ListView, который содержит TextView в каждой строке, помимо ряда других представлений. TextView отображает содержимое html, которое может содержать ссылки.

Следующий код отображается в списке. m_textview.setMovementMethod (LinkMovementMethod.getInstance ()); m_textview.setText (Html.fromHtml (myhtmlcontent));

Это приводит к тому, что listview больше не получает события щелчка. Я решил поместить список onclick-кода в представление, которое возвращается адаптером. Это не работает по желанию. Теперь я могу запустить другое действие, когда я нажимаю в любом месте строки, кроме текстового. Я хочу, чтобы пользователи могли нажимать на не-ссылки часть текста и запускать другое действие.

Если я перемещаю onclick в текстовое представление вместо его родительского представления, он работает, но теперь щелчок по ссылке вызывает два события: один для щелчка по ссылке, а другой для текстового просмотра (что нежелательно).

Я заметил, что google + и подглядывать на работу в андроиде так, как я хочу. Я не знаю, как это можно добиться.

Solutions Collecting From Web of "Android – ListView не получает OnItemClick для текстового просмотра с интерактивными ссылками"

На самом деле это BUG . Чтобы решить эту проблему, вы можете добавить android:descendantFocusability="blocksDescendants" вы используете ListView's раскладки строк в ListView's xml. Например, для

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:descendantFocusability="blocksDescendants" android:orientation="vertical" > <TextView android:id="@+id/lblStatusMessage" android:layout_width="fill_parent" android:layout_height="wrap_content" android:autoLink="web" android:focusable="false" android:textSize="15sp" /> </LinearLayout> 

Источник: это и это

Удачи 🙂

Фокусируемые представления внутри элемента ListView будут отключать возможность выбора элементов ListView. Применение android:focusable="false" для TextView позволит OnItemClick снова работать. Вам также может потребоваться применить android:focusableInTouchMode="false" чтобы заставить трекбол игнорировать ссылки, потому что нажатие трекбола над фокусируемым элементом в ListView может как щелкнуть ссылку, так и элемент ListView.

Вы можете прикрепить в списке список setOnItemClickListener.

У меня была такая же проблема, и ни один из этих ответов не работал для меня. В конце концов, мне удалось устранить проблему, удалив атрибут android:inputType="textMultiLine" .

TextView, который реагирует только на события касания ссылок. На основе https://stackoverflow.com/a/7327332/1768722

  public class AutoLinkTextView extends TextView { public AutoLinkTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } public AutoLinkTextView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public AutoLinkTextView(Context context) { super(context); init(); } private void init() { this.setAutoLinkMask(Linkify.ALL); } /** * @Linkify applies to a movementMethod to the textView @LinkMovementMethod. * That movement method thought it implements a scrolling * vertically method it overrides any other scrolling method the * parent has. * * Although touchEvent can be dispached to the parent, the specific * parent ScrollView needed the whole sequence ACTION_DOWN , * ACTION_MOVE, ACTION_UP to perform (sweep detection). So the * solution to this problem is after applying @Linkify we need to * remove the textView's scrolling method and handle the @LinkMovementMethod * link detection action in onTouchEvent of the textView. */ @Override public boolean onTouchEvent(MotionEvent event) { final TextView widget = (TextView) this; final Object text = widget.getText(); if (text instanceof Spannable) { final Spannable buffer = (Spannable) text; final int action = event.getAction(); if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_DOWN) { int x = (int) event.getX(); int y = (int) event.getY(); x -= widget.getTotalPaddingLeft(); y -= widget.getTotalPaddingTop(); x += widget.getScrollX(); y += widget.getScrollY(); final Layout layout = widget.getLayout(); final int line = layout.getLineForVertical(y); final int off = layout.getOffsetForHorizontal(line, x); final ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class); if (link.length != 0) { if (action == MotionEvent.ACTION_UP) { link[0].onClick(widget); } else if (action == MotionEvent.ACTION_DOWN) { Selection.setSelection(buffer, buffer.getSpanStart(link[0]), buffer.getSpanEnd(link[0])); } return true; } } } return false; } @Override public void setText(CharSequence text, BufferType type) { super.setText(text, type); this.setMovementMethod(null); } }