2012-03-17 4 views
0

Я пишу приложение с ListView текста. В каждой строке есть комбинация текста и ссылок. Я добавил OnItemLongClickListener в список и сделал ссылки интерактивными сLongClick textView, clickable link

my_text.setMovementMethod(LinkMovementMethod.getInstance()); 

Проблема в том, если я могу нажать на ссылку, я не могу получить TextView зарегистрировать LongClick.

Я пробовал разные методы, чтобы сделать ссылки интерактивными, такие как

android:autoLink="web 

Но это не делает ссылки кликабельны.

Мой вопрос: Есть ли другой способ, которым я должен установить LongClickListener, или другим способом сделать ссылки доступными?

Неужели кто-нибудь еще сталкивался с подобной проблемой?

Я хотел бы отметить, что прямо сейчас OnItemLongClickListener делает ссылку зарегистрировать LongClicks, но это вызывает проблему, когда TextView оленьей кожи есть ссылка или пользователь пытается longClick где-то в представлении (кроме ссылки)

Код: Я программно надуть RelativeLayout, содержащий представление списка и добавить его в вид ласт:

RelativeLayout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

    <ListView 
     android:id="@+id/my_list" 
     style="@style/listViewSimple" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="#f9f9f9" 
     android:cacheColorHint="#00000000" 
     android:divider="#ccc" 
     android:dividerHeight="1px" 
     android:fadingEdge="none" 
     android:fadingEdgeLength="30dp" 
     android:footerDividersEnabled="false" 
     android:headerDividersEnabled="false" 
     android:persistentDrawingCache="none" > 
    </ListView> 

</RelativeLayout> 

Добавление все программно:

  RelativeLayout list = (RelativeLayout) LayoutInflater.from(MyActivity.this).inflate(R.layout.my_list_layout, null); 
      vf.addView(list); 
      ListView lv = (ListView) list.findViewById(R.id.my_list); 
      lv.setOnItemLongClickListener(listLongListener); 

Создание ссылки кликабельны (в GetView() из ADAPTE):

 my_tv.setText(Html.fromHtml(formatted_text))); 
     my_tv.setLinkTextColor(linkColor); 
     my_tv.setMovementMethod(LinkMovementMethod.getInstance()); 

Это делает ссылки кликабельны, но, кажется, потребляют все клики, прежде чем они попадут в TextView. Я попытался добавить longClickListener, который возвращает false, но это, похоже, не повлияло.

Мое временное исправление заключается в том, чтобы установить itemLongClickListener и onItemClickListener в listItem и просто отобразить диалог с интерактивным текстом в onListItemClick. Это работает, но добавляет дополнительный щелчок, чтобы пользователи могли взаимодействовать с текстом.

+0

Можете ли вы рассказать мне, для чего нужен длинный клик? Я получаю, что щелчок по ссылке откроет его в веб-просмотре. У вас есть требование, чтобы при щелчке по элементу в списке он открыл другое действие с его деталями? – Shubhayu

+0

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

+0

Можете ли вы добавить код, в котором у вас в настоящее время установлен OnItemLongClickListener(), и часть, в которой вы делаете ссылку кликабельной? Также укажите xml, содержащий ваш список, и тот, который содержит элемент списка ure. – Shubhayu

ответ

0

Моим временным решением является установить onItemLongClickListener и onItemClickListener в listItem и просто отобразить диалог с интерактивным текстом в onItemClick. Это работает, но добавляет дополнительный щелчок, чтобы пользователи могли взаимодействовать с текстом.

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

2

Я бы создал пользовательский адаптер, установил ListView для использования этого адаптера, а затем в getView установил View.OnClickListener в TextView, у которого есть текст и View.OnLongClickListener в TextView, у которого есть ссылка. Удалите существующих слушателей, которые вы указали в своем вопросе, чтобы они не конфликтуют.

+0

Hey louie! Спасибо за совет, но я думаю, что я был неясно. Мне нужен весь вид, чтобы иметь возможность регистрировать longClick, а представление содержит изображение и несколько текстовых просмотров. Я хочу, чтобы ссылка была интерактивной, но в Longclick я показываю диалог со списком параметров для пользователей. Диалоговое окно должно появиться, если пользователь долгое время щелкнул изображение, текст или некоторые пробелы. У меня есть «строка», определенная в xml, которая содержит элементы списка, и я бы предпочел, чтобы они могли longClick в любом месте строки – ByteMe