2016-05-02 54 views
0

爲什麼EditText instanceof調用不起作用,但TextView instanceof調用是?EditText和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); 
     } 
    } 
... 
+1

基本上是因爲你忽略了''&&。 'instanceOf'可以正常工作,但是從中獲取字符串的方式是錯誤的。 '((EditText)current).getText()'返回一個'Editable'對象,而不是字符串。所以**一個條件的運營商,是不正確的**。 '((EditText)current).getText()。toString()'是你想要的。 –

回答

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); 
} 
0

另一種方式:

try { 
    ((EditText) current).setText(data); 
} catch (Exception e){ 
    // Not an EditText 
    try { 
    ((TextView) current).setText(data); 
    } catch (Exception e){ 
    // Not a textView 
    } 
} 
+1

不要使用異常來代替if-else塊...! – Massimo