我正在制作一个将卢比转换为美元的转换器应用程序,反之亦然,我只想使用两个编辑文本,我希望它工作,因为当我在编辑文本中输入一个用于卢比的值时,它应该同时在编辑文本中显示转换后的值,更准确地说,我希望如果我想将 120 卢比转换为美元, 当我开始输入 120 时,作为 1,它应该在美元编辑文本中同时显示转换后的值,然后是 12,最后是 120。
我试过了——
if(editText.isFocusable()==true){
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
str=editText.getText().toString();
rs = Double.parseDouble(str);
rstodol = rs / 65;
str1 = Double.toString(rstodol);
editText1.setText(str1);
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
else if(editText1.isFocusable()==true){
editText1.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
str=editText1.getText().toString();
dol=Double.parseDouble(str);
doltors=dol*65;
str2=Double.toString(doltors);
editText.setText(str2);
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
我错在哪里?
侦听器应该添加一次,然后它们执行任务,直到它们被删除。 由于外部if
块,您只添加一个侦听器。 相反,您要检查当前选定的编辑文本是否hasFocus()
:
editText = (EditText)findViewById(R.id.edittext);
editText1 = (EditText)findViewById(R.id.edittext1);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(editText.hasFocus()) {
try {
String str = editText.getText().toString();
double rs = Double.parseDouble(str);
double rstodol = rs / 65;
String str1 = Double.toString(rstodol);
editText1.setText(str1);
}catch(NumberFormatException e){
// invalid string entered
editText1.setText("");
}
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
editText1.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(editText1.hasFocus()) {
try {
String str = editText1.getText().toString();
double dol = Double.parseDouble(str);
double doltors = dol * 65;
String str2 = Double.toString(doltors);
editText.setText(str2);
}catch(NumberFormatException e){
// invalid string entered
editText.setText("");
}
}
}
@Override
public void afterTextChanged(Editable s) {
}
});