gpt4 book ai didi

android - TextView 中的多个点击跨度

转载 作者:太空宇宙 更新时间:2023-11-03 13:35:16 25 4
gpt4 key购买 nike

我有一个为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com