Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

26.08.2014, 21:57. Просмотров 1540. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ссылки (<a href="LINK">XXX</a>) внутри ListView (Программирование Android):

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

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

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

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

Ошибка "Unknown method "e" of "org.apache.commons.logging.Log" - Программирование Android
Unknown method 'e' of 'org.apache.commons.logging.Log' package com.mycompany.myapp; import android.widget.*; import...

Постепенно вывести на экран слово "Java", в котором буквы состоят из "интересных" элементов - Программирование Android
Я учусь в универе и вот пытаюсь делать лабораторные по языку java, только на свой телефон с помощью android studio )) До этого все...

19
Netscape
374 / 361 / 48
Регистрация: 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 / 48
Регистрация: 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 / 48
Регистрация: 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 / 48
Регистрация: 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 / 48
Регистрация: 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 / 48
Регистрация: 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 / 48
Регистрация: 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
28.08.2014, 15:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2014, 15:27
Привет! Вот еще темы с ответами:

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

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

Как "превратить" string "6.971245e-001" во float? - Программирование Android
Число конечно пример

Как прикрутить "свой браузер" к странице - "фрагмент" - Программирование Android
здравствуйте. все, уже голову сломал. не соображаю совсем. не получается прикрутить код браузера к странице fragments.выводиться должно на-...


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

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

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