我是 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());
}
});