Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
1

Ссылки (<a href="LINK">XXX</a>) внутри ListView

26.08.2014, 21:57. Показов 4564. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть контент который я выкачиваю из интернета, и отображаю в листе. Контент располагается в объекте Spanned. В контенте могут быть ссылки, а могут и не быть) И если они есть их нужно отобразить в TextView, с чем прекрасно справляется метод setText этого класса. Но вот как сделать, чтоб при нажатии на эту ссылку открывалось нужное мне активити?

Пробовал так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
viewHolder.tvStory.setMovementMethod(new LinkMovementMethod(){
                @Override
                public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {
                    int i = event.getAction();
                    try {
                        return super.onTouchEvent( widget, buffer, event ) ;
                    } catch( Exception ex ) {
                        Toast.makeText( context, "Could not load link  " +buffer, Toast.LENGTH_LONG ).show();
                        return true;
                    }
                }
          });
реагирует на нажатие, но вот как получить саму ссылку в методе onTouchEvent не понимаю, плюс у меня на лист нацеплен обработчик жестов и такая реализация вызывает крах приложения если этот самый обработчик не отключить. Вот я и думаю может легче будет все это отобразить в WebView заместо TextView? Или может есть какая нибудь вменяемая реализация моей проблемы при помощи TextView?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.08.2014, 21:57
Ответы с готовыми решениями:

Как в Java ввести строку формата xxx.xxx.xxx.xxx
Здравствуйте. Подскажите пожалуйста как в Java ввести строчку формата xxx.xxx.xxx.xxx и чтобы можно...

Firefox can't establich a connection to the server at xxx.xxx.xxx.xxx:2047
простейшее Silverlight приложение. Запущено под ASP .NET Development Server. на той же машине вижу...

IPFW. Не срабатывает правило с not адресом (not xxx.xxx.xxx.xxx)
Не работает - запретить всем локальным машинам сети, кроме ...0.52 ходить в Инет (to any, any to,...

Вывести все номера телефонов, содержащиеся в сообщении соответсвующие форматам xx-xx-xx, xxx-xxx и xxx-xx-xx
Вывести все номера телефонов, содержащиеся в сообщении соответсвующие форматам xx-xx-xx, xxx-xxx и...

Подскажите как привязать изменение атрибута ссылки к изменению кода в параметре href у произвольной ссылки?
Подскажите, как мне в соответствии с атрибутом у картинки изменить href ссылки. Т.е. есть у нас...

19
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
26.08.2014, 23:46 2
Мне нравиться вот такой способ:
http://sourabhsoni.com/impleme... plication/
очень элегантный и простой.
естественно, вместо хэштегов можно поставить ссылки заменив регулярку в строчке:
Java
1
Pattern tagMatcher = Pattern.compile("[#]+[A-Za-z0-9-_]+\\b");
1
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
27.08.2014, 17:27  [ТС] 3
Спасибо, за решение, но возникла следующая проблема.

Допустим есть строка : "Шла <a href="http://LINK">Маша</a> по шоссе, и ..." c помощью регулярки я нашел ссылку и сделал ее кликабельной, но как чтоб в место <a href="http://LINK">Маша</a> отображалось только имя ссылки и при нажатии на него происходил переход. Для хэштегов ваш вариант подходит идеально но для ссылок подобного типа не совсем.

Если в setText засунуть Spanned ссылка определяется но становится не кликабельна
0
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
27.08.2014, 18:43 4
В таком случае можно пойти изначальным путем, и написать свой LinkMovementMethod:
http://stackoverflow.com/a/16644228/2894324
0
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
27.08.2014, 20:05  [ТС] 5
Netscape, как я говорил у меня на Лист нацеплен обработчик жестов унаследованный от GestureDetector.SimpleOnGestureListener. И если я использую вариант с методом setMovementMethod у меня происходит вылет в методе

Java
1
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
из за того что e2 равен null это для меня вообще мистика)

Похоже ничего не остается кроме WebView
0
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
28.08.2014, 11:39 6
KillAndEat, может просто добавить проверку для е2 на null?
Java
1
2
3
4
5
6
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
{
if (e2 == null) {
return false;
}
}
0
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
28.08.2014, 14:04  [ТС] 7
Netscape, в таком случае обработчик жестов теряет функциональность.

Заметил что все становится нормально если прокрутить лист вверх. Тогда оба MotionEvent не равны нулю. Мистика.
0
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
28.08.2014, 14:15 8
Цитата Сообщение от KillAndEat Посмотреть сообщение
в таком случае обработчик жестов теряет функциональность.
А зачем ему обрабатывать жест, если юзер кликает по линку?
0
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
28.08.2014, 14:37  [ТС] 9
Netscape, загрузить следующую страницу контента
0
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
28.08.2014, 14:40 10
Цитата Сообщение от KillAndEat Посмотреть сообщение
загрузить следующую страницу контента
что-то я не понимаю.
пагинация сделана через GestureDetector.SimpleOnGestureListener что ли?
0
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
28.08.2014, 14:45  [ТС] 11
Netscape, ага=)

Добавлено через 4 минуты
можно как то по другому сделать ее?
0
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
28.08.2014, 15:02 12
KillAndEat, я бы сказал нужно)
На ListView вешаем OnScrollListener, дальше:
Java
1
2
3
4
5
6
7
    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        int lastInScreen = firstVisibleItem + visibleItemCount;
        if ((lastInScreen == totalItemCount) && isLoadingMore && !isLoading) {
            isLoading = true; // пора загружать новые данные
        }
    }
Есть даже готовая либа:
https://github.com/nicolasjafelle/PagingListView
1
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
28.08.2014, 15:14  [ТС] 13
Netscape, как понимаю подгрузка будет происходить когда закончится прокрутка списка. Данные будут добавляться в уже имеющийся массив данных. Не вызовет ли это "тормоза" со временем из за слишком большого количества объектов в этом массиве?
0
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
28.08.2014, 15:20 14
Цитата Сообщение от KillAndEat Посмотреть сообщение
подгрузка будет происходить когда закончится прокрутка списка
Нет, когда юзер докрутит в самый низ списка:
но и это можно изменить в строчке:
if ((lastInScreen == totalItemCount) && isLoadingMore && !isLoading)
например так:
if ((lastInScreen > totalItemCount - 5) && isLoadingMore && !isLoading)
тогда, подгрузка начнется когда до конца списка будет еще 5 элементов.
Цитата Сообщение от KillAndEat Посмотреть сообщение
Не вызовет ли это "тормоза" со временем из за слишком большого количества объектов в этом массиве
Это уже зависит от того насколько эффективно будет написан адаптер. Юзать ViewHolder и тому подобное.
1
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
28.08.2014, 15:27  [ТС] 15
Цитата Сообщение от Netscape Посмотреть сообщение
Нет, когда юзер докрутит в самый низ списка:
ну я это и имел ввиду) не правильно выразился.
Цитата Сообщение от Netscape Посмотреть сообщение
Юзать ViewHolder и тому подобное
это все есть, но все же)

Буду экспериментировать) А чем мой вариант пагинации плох, кроме имеющейся проблемы?)
0
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
28.08.2014, 15:31 16
Цитата Сообщение от KillAndEat Посмотреть сообщение
А чем мой вариант пагинации плох, кроме имеющейся проблемы?)
Он плох тем, что не предназначен для пагинации.
Это все равно что кофеваркой гвозди забивать)
Вроде как и можно, но предназначена она для другого.
0
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
28.08.2014, 15:33  [ТС] 17
Netscape, для чего же он тогда нужен, этот обработчик жестов?)
0
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
28.08.2014, 15:36 18
Цитата Сообщение от KillAndEat Посмотреть сообщение
обработчик жестов?)
Жесты обрабатывать, естественно.
Свайпы, тап, дабл тап, скролл, и тому подобное. Т.е. инструмент универсальный и в этом конкретном случае его использование просто не оправдано.
0
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
28.08.2014, 15:44  [ТС] 19
Netscape, это понятно что жесты. Просто конкретная ситуация интересует
0
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
28.08.2014, 16:16 20
Цитата Сообщение от KillAndEat Посмотреть сообщение
Просто конкретная ситуация интересует
В каком смысле конкретная?
Вы просто выбрали неподходящий инструмент для решения задачи. Может он ее и решал, но добавил глюков, в результате чего некорректно работали ссылки.
Что я пропустил или не так понял?
0
28.08.2014, 16:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.08.2014, 16:16
Помогаю со студенческими работами здесь

mailto:xxx@xxx.xxx?subject=The file <Y> cannot be found.
в скрипте стоит следующее document.write('&lt;a href='mailto:xxx@xxx.xxx?subject=The file &lt;Y&gt;...

<Link HREF="mailto:sss@ttt.net.ua" REV="made"></Link>
Помогите разобраться, как и когда работает эта конструкция: &lt;Link HREF='mailto:sss@ttt.net.ua'...

Изменить href тэга link
Подскажите как при загрузке страницы изменить href тэга link что бы загрузился и применился другой...

Нужно сменить значение атрибута href тега link
Пытаюсь сменить значение href, чтобы при нажатии на кнопку менялась тема. Переключать классы не...

В чем преимущество подключения Styles.Render от обычного link href
В чем преемущество подключения(или зачем) @Styles.Render(&quot;~/Content/css&quot;) от обычного &lt;link...

Изменение ссылки a href
Здравствуйте, подскажите плиз, где искать этот &lt;a href чтоб изменить ссылку. В теме на сайте...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru