кликабельный диапазон в ListView

Я пытаюсь реализовать комментарий, например список, в котором вы можете упомянуть других пользователей в комментариях, а затем иметь возможность щелкнуть по нему, чтобы перейти к их профилю. Например, при публикации комментария на Reddit вы можете упомянуть другого пользователя с помощью /u/username.

Единственная проблема, с которой я сталкиваюсь, заключается в том, как сделать так, чтобы я мог щелкнуть текст, чтобы загрузить профиль этого пользователя.

Для списка комментариев у меня, по сути, есть собственный список текстовых представлений. Погуглив вокруг, я увидел, что можно щелкнуть текст в текстовом представлении, используя интерактивный диапазон. Однако мне не удалось заставить это работать в списке текстовых представлений. Кто-нибудь может помочь?

Это соответствующие разделы моего кода:

Интерактивный диапазон, который я объявил как переменную-член:

ClickableSpan clickableSpan = new ClickableSpan() {

    @Override
    public void onClick(View widget) {
        Intent intent = new Intent(context, ProfileActivity.class);
        // ParseUser.getQuery().whereEqualTo(Constants.kQollegeUserPreferredUsernameKey, sta)
        intent.putExtra("User", ParseUser.getCurrentUser().getObjectId());
        context.startActivity(intent);
    }
};

Внутри getView:

    TextView answer_text_view = answerView.getAnswerTextView();

    String text = answer.getAnswerText();
    if(text.contains("@")) {
        text += " ";
        final SpannableStringBuilder sb = new SpannableStringBuilder(text);

        List<Integer> start = new ArrayList<>();
        int index = text.indexOf("@");
        while (index >= 0) {
            start.add(index);
            index = text.indexOf("@", index + 1);
        }

        for(int i = 0; i<start.size(); i++){
            sb.setSpan(fcs, start.get(i), text.indexOf(" ", start.get(i)), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
            sb.setSpan(clickableSpan, start.get(i), text.indexOf(" ", start.get(i)), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        }

        answer_text_view.setText(sb);
    }

person Pseduosance    schedule 04.10.2015    source источник
comment
afaik, вы не можете использовать один и тот же диапазон в нескольких местах   -  person pskink    schedule 04.10.2015
comment
эта концепция называется linkify. вот пример.   -  person Rahul Tiwari    schedule 04.10.2015
comment
@RahulTiwari работает ли linkify для запуска других действий? Я не пытаюсь перейти по URL-адресу, просто начинаю намерение   -  person Pseduosance    schedule 04.10.2015
comment
вы можете реализовать его по мере необходимости.   -  person Rahul Tiwari    schedule 04.10.2015
comment
так что не работает?   -  person pskink    schedule 04.10.2015
comment
@RahulTiwari Не могли бы вы дать мне ссылку или написать пример того, как вы могли бы начать другое действие с помощью намерения, используя linkify?   -  person Pseduosance    schedule 08.10.2015
comment
Проверьте пример из моего первого комментария   -  person Rahul Tiwari    schedule 09.10.2015
comment
@RahulTiwari Я просмотрел пример, на который вы ссылались, но в нем ничего не было об использовании linkify для начала нового действия, просто для загрузки URL-адресов / веб-страниц, что мне не нужно.   -  person Pseduosance    schedule 11.10.2015
comment
проверьте этот ответ   -  person Rahul Tiwari    schedule 11.10.2015
comment
Возможный дубликат ListView: TextView с LinkMovementMethod делает элемент списка неактивным?   -  person Deepak Gupta    schedule 26.04.2017


Ответы (1)


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

textView.setMovementMethod(LinkMovementMethod.getInstance());
person Shyam Sunder    schedule 20.07.2017