這是Android Studio培訓的一部分。創建新Activity時,爲什麼我們需要將EditText對象轉換爲EditText對象?
EditText editText = (EditText) findViewById(R.id.edit_message);
完整的方法是: http://developer.android.com/training/basics/firstapp/starting-activity.html
這是Android Studio培訓的一部分。創建新Activity時,爲什麼我們需要將EditText對象轉換爲EditText對象?
EditText editText = (EditText) findViewById(R.id.edit_message);
完整的方法是: http://developer.android.com/training/basics/firstapp/starting-activity.html
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()
。
EditText
是View
的子類,這就是這種鑄造工作的原因。
java.lang.Object
↳ android.view.View
↳ android.widget.TextView
↳ android.widget.EditText
findViewById
返回View
,這對於任何去Android通用類的方法。這意味着ListView
,TextView
,TabHost
等等等都是View
s。
您必須將其施放以使您所使用的對象可以訪問該View
的特定方法。例如,ListView
有EditText
沒有的方法。
可以投,沒有後顧之憂,因爲你知道是您正在使用的對象是確實的EditText
。您知道這是因爲您在編寫佈局時明確定義了EditText
,並且已爲此View
分配了一個ID,稍後您將使用該ID來標識完全相同的視圖。
你怎麼知道這是一個EditText
? Android如何知道它?
事實上,Android確實不是知道它,除非你這麼說,因爲返回類型findViewById()
是View
。雖然EditText
是View
的一種,但還有其他的,可以定義自定義的。演員告訴Android,你承諾View
返回將是一個EditText
,所以它可以把它作爲一個。它要求你明確地施展自己的保護 - 以便你知道你正在將自己的知識/假設注入到程序中。
如果您的承諾被發現有誤,那麼Android會拋出ClassCastException
來對此進行懲罰。
此外,我不知道有多少關於面向對象和Java的問題擁有者知道。因此,通過強制轉換,所有EditText特定方法(如.setTextSize(),.getText()等都可用。 –
我有一些Java的經驗。這已經有好幾年了,所以我正在努力刷新並同時潛入Android。謝謝大家的解釋。 – thethomasramsey