Android EditText和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

为什么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);
        }
    }
...
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()是您想要的。