我正在为android创建一个单位转换器。它有两个编辑文本,我想更新一个,因为用户输入了另一个的数字,但我无法得到它。
我尝试了几种方法,但到目前为止,我还无法解决这个问题。我是android的新手,我已经在java中创建了这个应用程序,但在这里我似乎无法得到它。
到目前为止,我已经使用了点击方法,但我非常希望它能够在用户输入编辑文本中的数字时显示转换
答案 0 :(得分:2)
你应该像Chadi建议的那样添加 TextChangedListener ,但我建议以不同的模式实现。请查看以下 TextWatcher
EditText firstEdit = (EditText) findViewById(R.id.firstEdit);
firstEdit.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
//Do here your conversion
secondEdit.setText(convertedText);
}
});
我建议您使用afterTextChanged,因为正如官方文档所述,您可以确定文本实际上已经更改。
官方文件:
调用此方法是为了通知您,在s中的某处文本 已更改。对s进行进一步更改是合法的 这个回调,但要注意不要陷入无限 循环,因为您所做的任何更改都将导致调用此方法 再次递归。 (你不会被告知改变发生在哪里 因为其他的afterTextChanged()方法可能已经有了其他方法 更改并使抵消无效。但如果你需要在这里知道,你 可以在onTextChanged中使用setSpan(Object,int,int,int)(CharSequence, int,int,int)标记你的地方,然后从这里查找 跨度最终。
答案 1 :(得分:1)
使用addTextChangedListener
这样做:
yourEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//do your conversion
yourSecondEditText.setText(text);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});