android - TextView 中的多个点击跨度

标签 android textview

我有一个为 TextView 构建可点击标签的功能。它是这样的:

    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 个可单独点击的标签的 TextView 。但问题是,为单击的任何标签打印的日志是 TextView 的整个文本。

我是不是做错了什么?如何获取被点击的单个标签的文本。

最佳答案

您的日志行如下:

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;
}

关于android - TextView 中的多个点击跨度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8099355/

相关文章:

java - 字符串编码 TextView.setText()

java - FirebaseFirestore 中的多个 whereEqualTo 条件

带有 Activity 的 Android fragment

android - Android中文本的阴影效果?

android - 如何在运行时使用 Android 上的形状属性更改 TextView 的颜色?

android - 具有多个彩色文本的单个 TextView

android - 使用谷歌键盘作为输入在 EditText 上丢失跨度

android - 在 Eclipse 中运行 APK 文件

java - 删除 HTML 实体及其内容

Android - ImageView 不会显示用相机拍摄的照片