在android中,如何将EditText中的可点击单词与TextWatcher关联?

在android中,如何将EditText中的可点击单词与TextWatcher关联?,android,string,textwatcher,clickablespan,Android,String,Textwatcher,Clickablespan,我在android中有一个字符串: String meow = "this_is_part1_and_here_another_and_another_one"; 我使用clickablespan使每个单词都可以点击 下面是为每个单词实现可点击范围的代码(改编自堆栈溢出答案之一) String meow=“这里是第1部分,这里是另一部分,这里是另一部分”; String[]tokens=meow.split(“”); ArrayList tokenList=新的ArrayList(Array

我在android中有一个字符串:

String meow =  "this_is_part1_and_here_another_and_another_one";
我使用
clickable
span使每个单词都可以点击

下面是为每个单词实现可点击范围的代码(改编自堆栈溢出答案之一)

String meow=“这里是第1部分,这里是另一部分,这里是另一部分”;
String[]tokens=meow.split(“”);
ArrayList tokenList=新的ArrayList(Arrays.asList(tokens));
if(meow!=null | | meow.length()!=0){
_field.setMovementMethod(LinkMovementMethod.getInstance());
_field.setText(addClickablePart(meow,tokenList),EditText.BufferType.SPANNABLE);
//_field.addTextChangedListener(新的TextWatcher(){
//
//@覆盖
//公共无效后文本已更改(可编辑){
//可编辑ab=新的SpannableStringBuilder(s.toString().replace(“A”、“A”));
//_field.setText(ab);
//Toast.makeText(getApplicationContext(),s.toString(),Toast.LENGTH_LONG).show();
// 
//      }
//
//@覆盖
//更改前文本之前的公共void(字符序列s、int start、int count、int after){
//        }
//
//@覆盖
//public void onTextChanged(字符序列、int start、int before、int count){
//
//       }
//       });
}
专用SpannableStringBuilder addClickablePart(字符串str、数组列表clickableWords){
SpannableStringBuilder ssb=新的SpannableStringBuilder(str);
for(字符串clickableWord:clickableWord){
int idx1=str.indexOf(clickableWord);
int-idx2=0;
while(idx1!=-1){
idx2=idx1+clickableWord.length();
最终字符串clickString=str.substring(idx1,idx2);
ssb.setSpan(新的MyClickableSpan(clickString),idx1,idx2,0);
idx1=str.indexOf(可点击单词,idx2);
}
}
返回ssb;
}
类MyClickableSpan扩展了ClickableSpan{
点击字符串;
公共MyClickableSpan(字符串){
超级();
单击=字符串;
}
公共void onClick(视图小部件){
Toast.makeText(widget.getContext(),单击,Toast.LENGTH_LONG.show();
}
public void updateDrawState(TextPaint ds){//override updateDrawState
ds.setUnderlineText(false);//设置为false可删除下划线
}
}
当我轻触某个单词时,我会为该单词干杯。现在,我想要的是当我点击这个特定的单词,在显示这个单词几秒钟后,这个单词在EditText中会变成空白,我在它的位置键入一个新词,然后得到那个特定的字符串

例如,
EditText
中显示了以下内容:

这是第1部分,这里是另一部分

我点击word
第1部分。在toast中显示
part1
几秒钟后,EditText中的单词变为空白,如下所示:

这是这里,这是另一个,这是另一个

现在我在原处键入一个新词,说
woof

这是一个又一个的

我将单词
woof
存储在一个字符串中

怎么做?简而言之,我如何使我的可点击单词与TextWatcher关联?我评论了TextWatcher部分,因为我不知道如何将其与ClickableSpan关联。请帮我做这件事。谢谢。

我认为你不可能在一段时间内“超链接”不同的单词。您只需单击listener即可获得文本视图。我建议您构建一个
视图组
,该视图组封装了一个或多个单词,并可以响应单个单词的点击

class HyperText extends LinearLayout {
  ...
  public static interface OnTextClickedListener {
    public void onTextClicked(String text);
  }   


  public void addText(String text) {
    TextView tv = new TextView(...); // or inflate it from somewhere
    tx.setOnClickListener(...); // call onTextClicked(this.getText());
    addView(tv);
  }
}

类似的东西。

存储单词
woof
的字符串是什么?这只是一个例子。我想将所有以前可点击的单词和所有编辑过的单词存储在地图/多地图中。我正在为每个单词创建跨距。我只需要一个机制来点击一个单词,然后通过键入替换该单词并检索键入的单词。是的,请参见上文。Android中没有任何东西能帮你做到这一点。您需要自己编写代码。
class HyperText extends LinearLayout {
  ...
  public static interface OnTextClickedListener {
    public void onTextClicked(String text);
  }   


  public void addText(String text) {
    TextView tv = new TextView(...); // or inflate it from somewhere
    tx.setOnClickListener(...); // call onTextClicked(this.getText());
    addView(tv);
  }
}