LinkMovementMethod Textview блокирует событие касания listitem

У меня проблема с просмотром списка. Listview имеет элементы списка, которые состоят из изображения и текста. Textview содержит кликабельные ссылки. Когда я устанавливаю LinkMovementMethod в текстовые представления, элементы списка не получают событие onclick. Я до сих пор не могу найти правильное решение =(. Может ли кто-нибудь объяснить, как это решить, или привести пример использования textview с интерактивными ссылками внутри listitem? Спасибо. Вот создание textview в адаптере:

    TextView text = (TextView) ((LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE))
                        .inflate(R.layout.post_content_text, null);
SpannableString sString = new SpannableString(d.getText());
//I have my own class UrlSpan that contain fields startPosition, endPosition and urlLink
for (UrlSpan us : ((TextData) d).getUrls())
                {
                    URLSpan urlSpan = new URLSpan(us.getUrl());
                    sString.setSpan(urlSpan, us.getStart(), us.getEnd(), SpannableString.SPAN_INCLUSIVE_INCLUSIVE);
                }
text.setText(sString);
text.setMovementMethod(LinkMovementMethod.getInstance());
view.addView(text);

и элемент списка:

<?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="fill_parent"
    android:visibility="visible" >

    <LinearLayout
        style="?PostListRow"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_margin="10dp"
        android:orientation="vertical"
        android:padding="10dp" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="65dp"
            android:orientation="horizontal" >

            <ImageView
                android:id="@+id/user_image"
                android:layout_width="45dp"
                android:layout_height="45dp"
                android:layout_margin="3dp"
                android:clickable="true"
                android:src="@drawable/ic_no_photo" />

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="55dp"
                android:layout_margin="0dp"
                android:orientation="vertical" >

                <TextView
                    android:id="@+id/user_title"
                    android:layout_width="fill_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"
                    android:clickable="true"
                    android:textSize="@dimen/title_in_list" />

                <TextView
                    android:id="@+id/post_datetime"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="5dp"
                    android:layout_marginTop="5dp"
                    android:textSize="@dimen/text_size_small" />
            </LinearLayout>

            <TextView
                android:id="@+id/post_number"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="right"
                android:text="123" />
        </LinearLayout>
<!-- it is a view where textview with links is to be added to -->
        <LinearLayout
            android:id="@+id/post_data"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:weightSum="6" >
        </LinearLayout>

        <TextView
            android:id="@+id/post_view"
            style="?PostText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="TextView"
            android:visibility="gone" />

        <LinearLayout
            android:id="@+id/topic_edit_view"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

person salvicode    schedule 12.03.2013    source источник
comment
поставь свой код. если у вас есть собственный адаптер, введите код адаптера с помощью clicklistner...   -  person Dhaval Parmar    schedule 12.03.2013
comment
Я наткнулся на ваш пост и считаю, что он был решен здесь: stackoverflow.com/questions/8558732/   -  person m3hughes    schedule 10.06.2014


Ответы (1)


попробуйте добавить этот атрибут android:descendantFocusability="beforeDescendants" в список

из документации:

он определяет отношения между ViewGroup и ее потомками при поиске представления, чтобы получить фокус. мне кажется, что когда у вас есть активные представления, такие как кнопки или текст редактирования и т. д., в вашем списке, вы должны определить потомокFocusability

person greenfrvr    schedule 17.04.2015
comment
вы могли бы объяснить, что делает добавление этого атрибута. - person deW1; 17.04.2015
comment
из документов он определяет отношения между ViewGroup и ее потомками при поиске представления, чтобы получить фокус. мне кажется, что когда у вас есть активные представления, такие как кнопки или текст редактирования и т. д., в вашем списке, вы должны определить потомокFocusability - person greenfrvr; 17.04.2015
comment
Блокирование возможности фокусировки потомка не работает при использовании SpannableString и LinkMovementMethod в ListView. Возможно, вы могли бы попробовать подход из этого принятого SO ответа... текстовое представление списка с методом linkmovementmethod делает элемент списка недоступным для клика"> stackoverflow.com/questions/8558732/ - person Dallas187; 20.05.2015