EditText和instanceof不工作?

时间:2016-05-02 13:31:38

标签: android

为什么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);
        }
    }
...

2 个答案:

答案 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
  }
}