TextView に複数のクリック可能なパーツを配置する方法がようやくわかりました。それらすべてに独自の ClickableSpan があることが重要です。それは私が最初にそれをテストしたときに間違ったところです。それらが同じ ClickableSpan インスタンスを持っている場合、最後に設定されたスパンのみが記憶されます。
「[」と「]」で囲まれた必要なクリック可能な領域を持つ文字列を作成しました。
String sentence = "this is [part 1] and [here another] and [another one]";
ここにセット TextView があります。setMovementMehtod も必須です。
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setText(addClickablePart(sentence), BufferType.SPANNABLE);
クリック可能な領域の作成を処理するこの関数を作成しました。
private SpannableStringBuilder addClickablePart(String str) {
SpannableStringBuilder ssb = new SpannableStringBuilder(str);
int idx1 = str.indexOf("[");
int idx2 = 0;
while (idx1 != -1) {
idx2 = str.indexOf("]", idx1) + 1;
final String clickString = str.substring(idx1, idx2);
ssb.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(getView().getContext(), clickString,
Toast.LENGTH_SHORT).show();
}
}, idx1, idx2, 0);
idx1 = str.indexOf("[", idx2);
}
return ssb;
}