Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
#1

Ссылки (<a href="LINK">XXX</a>) внутри ListView - Программирование Android

26.08.2014, 21:57. Просмотров 1085. Ответов 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?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.08.2014, 21:57     Ссылки (<a href="LINK">XXX</a>) внутри ListView
Посмотрите здесь:
Как добавить строку "." в начале в ListView со своим обработчиком Android
Android После вызова notifydataset() items в listview "моргают"
Android При прокрутке listview изображения подгружаются, но происходит "скачок" списка
Работа с БД, связывание таблиц "фильмы", "жанры", "режиссеры" Android
Android Ошибка "Unknown method "e" of "org.apache.commons.logging.Log"
Постепенно вывести на экран слово "Java", в котором буквы состоят из "интересных" элементов Android
Android Выбор платформы разработки "1С Мобильная платформа" или "Android Studio"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
26.08.2014, 23:46     Ссылки (<a href="LINK">XXX</a>) внутри ListView #2
Мне нравиться вот такой способ:
http://sourabhsoni.com/implementing-...d-application/
очень элегантный и простой.
естественно, вместо хэштегов можно поставить ссылки заменив регулярку в строчке:
Java
1
Pattern tagMatcher = Pattern.compile("[#]+[A-Za-z0-9-_]+\\b");
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
27.08.2014, 17:27  [ТС]     Ссылки (<a href="LINK">XXX</a>) внутри ListView #3
Спасибо, за решение, но возникла следующая проблема.

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

Если в setText засунуть Spanned ссылка определяется но становится не кликабельна
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
27.08.2014, 18:43     Ссылки (<a href="LINK">XXX</a>) внутри ListView #4
В таком случае можно пойти изначальным путем, и написать свой LinkMovementMethod:
http://stackoverflow.com/a/16644228/2894324
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
27.08.2014, 20:05  [ТС]     Ссылки (<a href="LINK">XXX</a>) внутри ListView #5
Netscape, как я говорил у меня на Лист нацеплен обработчик жестов унаследованный от GestureDetector.SimpleOnGestureListener. И если я использую вариант с методом setMovementMethod у меня происходит вылет в методе

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

Похоже ничего не остается кроме WebView
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
28.08.2014, 11:39     Ссылки (<a href="LINK">XXX</a>) внутри ListView #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;
}
}
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
28.08.2014, 14:04  [ТС]     Ссылки (<a href="LINK">XXX</a>) внутри ListView #7
Netscape, в таком случае обработчик жестов теряет функциональность.

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

Добавлено через 4 минуты
можно как то по другому сделать ее?
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
28.08.2014, 15:02     Ссылки (<a href="LINK">XXX</a>) внутри ListView #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
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
28.08.2014, 15:14  [ТС]     Ссылки (<a href="LINK">XXX</a>) внутри ListView #13
Netscape, как понимаю подгрузка будет происходить когда закончится прокрутка списка. Данные будут добавляться в уже имеющийся массив данных. Не вызовет ли это "тормоза" со временем из за слишком большого количества объектов в этом массиве?
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
28.08.2014, 15:20     Ссылки (<a href="LINK">XXX</a>) внутри ListView #14
Цитата Сообщение от KillAndEat Посмотреть сообщение
подгрузка будет происходить когда закончится прокрутка списка
Нет, когда юзер докрутит в самый низ списка:
но и это можно изменить в строчке:
if ((lastInScreen == totalItemCount) && isLoadingMore && !isLoading)
например так:
if ((lastInScreen > totalItemCount - 5) && isLoadingMore && !isLoading)
тогда, подгрузка начнется когда до конца списка будет еще 5 элементов.
Цитата Сообщение от KillAndEat Посмотреть сообщение
Не вызовет ли это "тормоза" со временем из за слишком большого количества объектов в этом массиве
Это уже зависит от того насколько эффективно будет написан адаптер. Юзать ViewHolder и тому подобное.
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
28.08.2014, 15:27  [ТС]     Ссылки (<a href="LINK">XXX</a>) внутри ListView #15
Цитата Сообщение от Netscape Посмотреть сообщение
Нет, когда юзер докрутит в самый низ списка:
ну я это и имел ввиду) не правильно выразился.
Цитата Сообщение от Netscape Посмотреть сообщение
Юзать ViewHolder и тому подобное
это все есть, но все же)

Буду экспериментировать) А чем мой вариант пагинации плох, кроме имеющейся проблемы?)
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
28.08.2014, 15:31     Ссылки (<a href="LINK">XXX</a>) внутри ListView #16
Цитата Сообщение от KillAndEat Посмотреть сообщение
А чем мой вариант пагинации плох, кроме имеющейся проблемы?)
Он плох тем, что не предназначен для пагинации.
Это все равно что кофеваркой гвозди забивать)
Вроде как и можно, но предназначена она для другого.
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
28.08.2014, 15:33  [ТС]     Ссылки (<a href="LINK">XXX</a>) внутри ListView #17
Netscape, для чего же он тогда нужен, этот обработчик жестов?)
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
28.08.2014, 15:36     Ссылки (<a href="LINK">XXX</a>) внутри ListView #18
Цитата Сообщение от KillAndEat Посмотреть сообщение
обработчик жестов?)
Жесты обрабатывать, естественно.
Свайпы, тап, дабл тап, скролл, и тому подобное. Т.е. инструмент универсальный и в этом конкретном случае его использование просто не оправдано.
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
28.08.2014, 15:44  [ТС]     Ссылки (<a href="LINK">XXX</a>) внутри ListView #19
Netscape, это понятно что жесты. Просто конкретная ситуация интересует
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2014, 16:16     Ссылки (<a href="LINK">XXX</a>) внутри ListView
Еще ссылки по теме:
При эмулировании вместо надписи "Hello world" отображается "android" Android
Как "превратить" string "6.971245e-001" во float? Android
Как прикрутить "свой браузер" к странице - "фрагмент" Android
Что означают конструкции "finally" и "throw new"? Android
блокирование кнопок "Home" "Back" Android

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

Или воспользуйтесь поиском по форуму:
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
28.08.2014, 16:16     Ссылки (<a href="LINK">XXX</a>) внутри ListView #20
Цитата Сообщение от KillAndEat Посмотреть сообщение
Просто конкретная ситуация интересует
В каком смысле конкретная?
Вы просто выбрали неподходящий инструмент для решения задачи. Может он ее и решал, но добавил глюков, в результате чего некорректно работали ссылки.
Что я пропустил или не так понял?
Yandex
Объявления
28.08.2014, 16:16     Ссылки (<a href="LINK">XXX</a>) внутри ListView
Ответ Создать тему
Опции темы

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