2013-09-26 161 views
-4

Toast.makeText()方法的其中一個參數是上下文。Android中的敬酒

而對於該參數,我可以看到在某些Android教科書中給出的值爲ActivityName.this

不應該是this.xxx

+0

你是如何比較'ActivityName.this'和'this.xxx'? 'this.xxx'將始終引用類的成員本身。 –

+0

你在說'this'或'this.xxx' –

回答

1

並不總是,這取決於你在哪裏創建吐司。例如,如果您在Button點擊偵聽器的onClick方法中創建了Toast,則this將是Button,它不能提供上下文。

+0

你不能在click監聽器中使用'this'只有它是匿名類..有幾種實現監聽器的方法..一種方法是聲明'android: onClick =「click」屬性爲按鈕XML並聲明方法'click(View v){//執行任務}'..在這種情況下,偵聽器不是匿名類 –

+0

這只是一個可能的例子來解釋爲什麼你不能總是將此用作上下文。我不打算做這個講座。 – fasteque

+0

放輕鬆.u剛剛提到的點擊監聽器,因此我指出了它。 –

0

不是。如果您在ActivityName的內部類中,請致電ActivityName.this。如果你不在內部班級,你只需撥打this。 關鍵是要參考Activity並將其用作上下文。

1

ActivityName.this如果代碼位於嵌套類中,則獲取對具有該名稱的封閉類的對象的引用。例如,如果你寫的代碼你Activity的代碼中:

public void onCreate(Bundle bundle) { 
    // ... 
    Button button = (Button) findViewById(R.id.button1); 

    button.setOnClickListener(new OnClickListener() { // An anonymous nested class 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(this, "Example", Toast.LENGTH_SHORT); 
      // This one causes an error; this is not a Context 
      Toast.makeText(YourActivity.this, "Example", Toast.LENGTH_SHORT); 
      // This one works 
     } 
    }); 
} 

第一this現指型OnClickListener的對象。這不是Context,所以這是一個錯誤。第二個是指當地YourActivity,這是一個Activity,所以一個Context,所以它的工作原理。