2014-02-19 67 views
4
/** Called when the user clicks the Send button */ 
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); 
    startActivity(intent); 
} 

在該行解釋語法EditText editText =(EditText)findViewById(R.id.edit_message);

EditText editText = (EditText) findViewById(R.id.edit_message); 

EditText是階級和 editText是我們正在創建的實例。 findViewById(R.id.edit_message)是方法和R.id.edit_message是我們正在通過的參數

但我不明白爲什麼有thos (EditText)目前? 它是對構造函數的調用嗎?

回答

6

這是明確的類型轉換。 findViewById()返回View並且(EditText)明確地將其類型化爲EditText(其是View的子類)。這是有效的,因爲實際返回的對象是-a EditText,即該類或其某個子類的對象。如果不是,你會得到ClassCastException

瞭解更多:http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

+0

感謝您的回答 – Nikhil

3
is it the call to constructor? 

EditText editText = (EditText) findViewById(R.id.edit_message); 

在上述行(EditText)是鑄字..

findViewById()它返回View object.so我們強制轉換它EditText對象。

EditTextView類的子類。

+0

非常感謝! – Nikhil

1

findViewById(R.id.edit_message)返回類別ViewEditText從這個類擴展,這就是爲什麼我們需要投ViewEditText。 如果我們需要查看類,那麼我們就可以簡單地寫View v = findViewById(R.id.some_view);

+0

感謝這幫助 – Nikhil

2

在下面一行...

EditText editText = (EditText) findViewById(R.id.edit_message); 

findViewById(R.id.edit_message)返回視圖......但是,這種觀點是廣義的概念,它可以是任何類型的視圖。所以你不能從這個返回的視圖中確定這是哪種類型。這就是爲什麼你必須將視圖返回到特定視圖的Cast。在這裏,返回的視圖使用(EditText)轉換爲EditText

+0

謝謝這有助於! – Nikhil

+0

是啊..其實到現在爲止我沒有享受過特權,作爲一個新手來計算器 – Nikhil

-1

<EditText android:id="@+id/edit_message" <<<<<<<<<<<<<<<<<< android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:hint="@string/edit_message"/>