我是 Android 开发的新手(我正在上课),所以请耐心等待。
我必须使用 TextWatcher 将 EditText 小部件中的已编辑文本显示到 TextView 小部件中。
例如,如果最初输入的内容被编辑(例如,如果用户输入“Hoozledoofer”,然后突出显示“zledoof”,最后在其位置输入“v”),我必须首先以以下格式输出更改:
'zledoof' => 'v'
这显示在 TextView 的第一行。然后,第二行将显示现在存在于 EditText 小部件中的全文:
Hoover
我不知道该怎么做。我知道我需要在 afterTextChanged 方法中输出结果。如何保存已完成的内容,并且仍然保持输出输入的内容?有什么建议吗?
下面是课堂上给出的 TextWatcher 示例:
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    txtEdit = (EditText) findViewById(R.id.editText1);
    viewText = (TextView) findViewById(R.id.text);
     txtEdit.addTextChangedListener (new TextWatcher() {
          public void beforeTextChanged(CharSequence s, int start, int count, int after) {
              Log.i("TC", "beforeTC " + s.toString() + " "
                      + s.subSequence(start, start + count).toString());
          }
          public void onTextChanged(CharSequence s, int start, int before, int count) {
              Log.i("TC", "onTC " + s.toString() + " "
                      + s.subSequence(start, start + count).toString());
          }
          public void afterTextChanged(Editable s) {
              Log.i("TC", "afterTC " + s.toString());
          }
     });
}
这是我尝试过的提供预期最终结果的方法,但它确实会继续显示所做的每一个小编辑。这可能不是问题,可能对教授有用:
     txtEdit.addTextChangedListener (new TextWatcher() {
         String changed, newStr, edit;
          public void beforeTextChanged(CharSequence s, int start, int count, int after) {
              changed = s.subSequence(start, start + count).toString();
              //Log.i("TC", "beforeTC " + s.toString() + " "
                      //+ s.subSequence(start, start + count).toString());
          }
          public void onTextChanged(CharSequence s, int start, int before, int count) {
              newStr = s.toString();
              edit = s.subSequence(start, start + count).toString();
              //Log.i("TC", "onTC " + s.toString() + " "
                      //+ s.subSequence(start, start + count).toString());
          }
          public void afterTextChanged(Editable s) {
              viewText.setText(changed + " => " + edit + "\n" + newStr);
              //Log.i("TC", "afterTC " + s.toString());
          }
     });