Android EditText和instanceof不工作?
为什么EditText instanceof调用不起作用,而TextView instanceof调用起作用 我能用泛型或其他更好的方法解决这个问题吗Android EditText和instanceof不工作?,android,Android,为什么EditText instanceof调用不起作用,而TextView instanceof调用起作用 我能用泛型或其他更好的方法解决这个问题吗 public class MyActivity extends ActionBarActivity ... @Override public void updateView() { updateField(noteEditText, vault.getNote()); updateField(cate
public class MyActivity extends ActionBarActivity
...
@Override
public void updateView() {
updateField(noteEditText, vault.getNote());
updateField(categoryTextView, category.getName());
}
private void updateField(View current, String data) {
if(current instanceof EditText && data.equals(((EditText) current).getText())) {
((EditText) current).setText(data);
} else if(current instanceof TextView && data.equals(((TextView) current).getText())) {
((TextView) current).setText(data);
}
}
...
EditText.getText()不返回字符串
,而是返回可编辑
对象,这就是第一次检查总是失败的原因。只需对((可编辑)current)的结果调用toString()
EditText.getText()不返回字符串
,而是返回可编辑
对象,这就是第一次检查总是失败的原因。只需对((可编辑)current)的结果调用toString()
另一种方式:
try {
((EditText) current).setText(data);
} catch (Exception e){
// Not an EditText
try {
((TextView) current).setText(data);
} catch (Exception e){
// Not a textView
}
}
另一种方式:
try {
((EditText) current).setText(data);
} catch (Exception e){
// Not an EditText
try {
((TextView) current).setText(data);
} catch (Exception e){
// Not a textView
}
}
不要使用异常来代替if-else块。。。!不要使用异常来代替if-else块。。。!基本上是因为您忽略了&&
instanceOf
工作正常,但从中获取字符串的方式是错误的((EditText)current).getText()返回可编辑的对象,而不是字符串。所以运算符and的一个条件是不正确的<代码>((EditText)current).getText().toString()
是您想要的。基本上是因为您忽略了&&
instanceOf
工作正常,但从中获取字符串的方式是错误的((EditText)current).getText()返回可编辑的对象,而不是字符串。所以运算符and的一个条件是不正确的<代码>((EditText)当前)。getText()。toString()是您想要的。