context解釋

Context不是函數而是一個類--如果不太瞭解面向對象,可以把“類”看做一種數據類型,就像int,不過類型爲“類”的數據(稱爲對象)可能儲存遠比int多的信息,比如這裏的類型爲Context的對象就儲存關於程序、窗口的一些資源。有些函數調用時需要一個Context參數,比如Toast.makeText,因爲函數需要知道是在哪個界面中顯示的Toast。再比如,Button myButton = new Button(this); 這裏也需要Context參數(this),表示這個按鈕是在“this”這個屏幕中顯示的。Android開發使用(純粹的)面嚮對象語言,一切都是對象,就連我們寫的函數都是對象的函數。public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toast.makeText(this, "OK!", Toast.LENGTH_LONG).show(); Button button1 = (Button)findViewById(R.id.button1); button1.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v) { Toast.makeText(MainActivity.this, "Hello, world!", Toast.LENGTH_LONG).show(); } }); }}這裏OnCreate就是MainActivity的對象的函數(MainActivity是類),所以這個函數中的this就表示當前的、包含這個函數的MainActivity對象。MainActivity extends Activity,意思是MainActivity 繼承 Activity,即MainActivity 是 Activity 的一種,所有的MainActivity 都是 Activity。同樣,在Android文檔中Activity繼承ContextThemeWrapper,ContextThemeWrapper繼承ContextWrapper,ContextWrapper繼承Context。所以this這個MainActivity也是Context,把this傳入Toast.makeText表示“OK!”是在當前的MainActivity對象(也是Context)中顯示的。對於顯示"Hello, world!"的Toast.makeText,這個函數在onClick中,而onClick是new Button.OnClickListener(){...}這個沒有名字的類的函數,this表示匿名類的對象,不表示MainActivity對象,所以這裏用MainActivity.this,強制選擇外面一層MainActivity的this。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章