Несколько кликов в текстовом представлении - PullRequest
3 голосов
/ 12 ноября 2011

У меня есть функция для создания кликабельных тегов для просмотра текста.Это выглядит следующим образом:

    private CharSequence tagsBuilder(String text, String token) {
    SpannableStringBuilder builtTags = new SpannableStringBuilder();
    int start = 0, end = 0;

    for(int i = 0; i < 5; i++) {
        start = 0;
        end = text.indexOf(token, 0);

        try {
            if(start < end) {
                SpannableStringBuilder ssb = new SpannableStringBuilder(text.substring(start, end));
                ssb.setSpan(new ClickableSpan() {
                    @Override
                    public void onClick(View v)
                    {

                        Log.i("DEBUGTAG", "Span clicked - " + ((TextView) v).getText());
                    }
                }, start, end, 0);

                builtTags.append(ssb);
                builtTags.append(" ");
                text = text.substring(end + 1);
            }
        } catch (IndexOutOfBoundsException e) {
            break;
        }
    }

    return builtTags;
}

Я вижу текстовое представление с 5 индивидуально кликабельными тегами.Но проблема в том, что журнал, который печатает для любого тега, по которому щелкают, является целым текстом текстового представления.

Я что-то здесь не так делаю?Как получить текст отдельных тегов, по которым щелкнули.

1 Ответ

4 голосов
/ 12 ноября 2011

Ваша строка журнала выглядит следующим образом:

Log.i("DEBUGTAG", "Span clicked - " + ((TextView) v).getText());

Это записывает содержимое TextView. Итак ... вы получаете текст TextView. Если вы хотите добавить туда token, вам придется скопировать это.

Вот что вы можете попробовать:

private CharSequence tagsBuilder(String text, final String token) {
SpannableStringBuilder builtTags = new SpannableStringBuilder();
int start = 0, end = 0;

for(int i = 0; i < 5; i++) {
    start = 0;
    end = text.indexOf(token, 0);

    try {
        if(start < end) {
            SpannableStringBuilder ssb = new SpannableStringBuilder(text.substring(start, end));
            ssb.setSpan(new ClickableSpan() {
                private String mText = token;
                @Override
                public void onClick(View v)
                {

                    Log.i("DEBUGTAG", "Span clicked - " + mText);
                }
            }, start, end, 0);

            builtTags.append(ssb);
            builtTags.append(" ");
            text = text.substring(end + 1);
        }
    } catch (IndexOutOfBoundsException e) {
        break;
    }
}

return builtTags;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...