2015-12-09 46 views

回答

3

findViewById()返回View默認情況下,這還不包括類似的方法:

public void sendMessage(View view) { 
    Intent intent = new Intent(this, DisplayMessageActivity.class); 
    EditText editText = (EditText) findViewById(R.id.edit_message); 
    String message = editText.getText().toString(); 
    intent.putExtra(EXTRA_MESSAGE, message); 
} 

該培訓項目的更多信息可以在這裏找到例如,getText()

EditTextView的子類,這就是這種鑄造工作的原因。

java.lang.Object 
    ↳ android.view.View 
     ↳ android.widget.TextView 
      ↳ android.widget.EditText 
+0

此外,我不知道有多少關於面向對象和Java的問題擁有者知道。因此,通過強制轉換,所有EditText特定方法(如.setTextSize(),.getText()等都可用。 –

+1

我有一些Java的經驗。這已經有好幾年了,所以我正在努力刷新並同時潛入Android。謝謝大家的解釋。 – thethomasramsey

1

findViewById返回View,這對於任何去Android通用類的方法。這意味着ListView,TextView,TabHost等等等都是View s。

您必須將其施放以使您所使用的對象可以訪問該View的特定方法。例如,ListViewEditText沒有的方法。

可以投,沒有後顧之憂,因爲你知道您正在使用的對象是確實EditText。您知道這是因爲您在編寫佈局時明確定義了EditText,並且已爲此View分配了一個ID,稍後您將使用該ID來標識完全相同的視圖。

1

你怎麼知道這是一個EditText? Android如何知道它?

事實上,Android確實不是知道它,除非你這麼說,因爲返回類型findViewById()View。雖然EditTextView的一種,但還有其他的,可以定義自定義的。演員告訴Android,你承諾View返回將是一個EditText,所以它可以把它作爲一個。它要求你明確地施展自己的保護 - 以便你知道你正在將自己的知識/假設注入到程序中。

如果您的承諾被發現有誤,那麼Android會拋出ClassCastException來對此進行懲罰。

相關問題