我是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());
}
});
答案 0 :(得分:2)
由于这是作业,我不会给你答案。 (你的老师通过给你一个好的榜样开始做很多繁忙的工作。)但我会给你一个提示:
例如,如果最初输入的内容被编辑(如果用户键入“Hoozledoofer”然后突出显示“zledoof”并最终在其位置键入“v”),我将不得不首先以格式输出更改:
'zledoof' => 'v'
这显示在TextView的第一行。
注意相对于before
的{{1}}和after
。这将帮助您了解用户何时添加或减去文本。
第二部分很简单,你似乎已经有了答案:
然后,第二行将显示EditText小部件中现在出现的全文:
count
我知道我需要在afterTextChanged方法中输出结果。
答案 1 :(得分:0)
另一件需要注意的事情是,不要更改beforeTextChanged或onTextChanged回调中的CharSequence,并注意如果在afterTextChanged回调中更改CharSequence,它将导致对该系列回调的另一次调用(如果不小心,可以进行无限递归。
TextWatcher doc:http://developer.android.com/reference/android/text/TextWatcher.html
编辑:我认为你不必担心这个,以为你最初把它写到了EditText,但我现在看到你正在把改变写入TextView,仍然没有受到影响但是你的思绪背后。