Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
1

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

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

Есть контент который я выкачиваю из интернета, и отображаю в листе. Контент располагается в объекте 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.08.2014, 21:57
Ответы с готовыми решениями:

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

После вызова notifydataset() items в listview "моргают"
столкнулся с такой проблемой, перерыл stackoverflow, ответа не нашел есть...

При прокрутке listview изображения подгружаются, но происходит "скачок" списка
Здравствуйте. Использую listview и item с текстом и изображениями. При...

Работа с БД, связывание таблиц "фильмы", "жанры", "режиссеры"
Ребят, всем привет! накидайте какие-нить идеи по реализации ситуация такая...

Ошибка "Unknown method "e" of "org.apache.commons.logging.Log"
Unknown method 'e' of 'org.apache.commons.logging.Log' package...

19
Netscape
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
26.08.2014, 23:46 2
Мне нравиться вот такой способ:
http://sourabhsoni.com/implementing-hashtags-in-android-application/
очень элегантный и простой.
естественно, вместо хэштегов можно поставить ссылки заменив регулярку в строчке:
Java
1
Pattern tagMatcher = Pattern.compile("[#]+[A-Za-z0-9-_]+\\b");
1
KillAndEat
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
Netscape
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
27.08.2014, 18:43 4
В таком случае можно пойти изначальным путем, и написать свой LinkMovementMethod:
http://stackoverflow.com/a/16644228/2894324
0
KillAndEat
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
Netscape
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
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
28.08.2014, 14:04  [ТС] 7
Netscape, в таком случае обработчик жестов теряет функциональность.

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

Добавлено через 4 минуты
можно как то по другому сделать ее?
0
Netscape
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
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
28.08.2014, 15:14  [ТС] 13
Netscape, как понимаю подгрузка будет происходить когда закончится прокрутка списка. Данные будут добавляться в уже имеющийся массив данных. Не вызовет ли это "тормоза" со временем из за слишком большого количества объектов в этом массиве?
0
Netscape
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
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
28.08.2014, 15:27  [ТС] 15
Цитата Сообщение от Netscape Посмотреть сообщение
Нет, когда юзер докрутит в самый низ списка:
ну я это и имел ввиду) не правильно выразился.
Цитата Сообщение от Netscape Посмотреть сообщение
Юзать ViewHolder и тому подобное
это все есть, но все же)

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

Постепенно вывести на экран слово "Java", в котором буквы состоят из "интересных" элементов
Я учусь в универе и вот пытаюсь делать лабораторные по языку java, только на...

Выбор платформы разработки "1С Мобильная платформа" или "Android Studio"
Всем, здравствуйте! Есть задача по разработке клиента для терминала сбора...

При эмулировании вместо надписи "Hello world" отображается "android"
Привет форумчане! Я только-только начинал программировать на андроиде. Поставил...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru