为什么EditText instanceof调用不起作用但是TextView instanceof调用是?
我可以用泛型或其他更好的方法来解决这个问题吗?
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);
}
}
...
答案 0 :(得分:3)
EditText.getText()不返回String
而是Editable
对象,这就是第一次检查总是失败的原因。只需在toString()
:
((Editable)current).getText()
即可
if(current instanceof EditText && data.equals(((EditText) current).getText().toString())) {
((EditText) current).setText(data);
} else if(current instanceof TextView && data.equals(((TextView) current).getText().toString())) {
((TextView) current).setText(data);
}
答案 1 :(得分:0)
另一种方式:
try {
((EditText) current).setText(data);
} catch (Exception e){
// Not an EditText
try {
((TextView) current).setText(data);
} catch (Exception e){
// Not a textView
}
}