2012-05-13 51 views
1

我有以下的Java代碼:使用「this」關鍵字創建事件處理程序時

public class FirstActivity extends Activity implements OnClickListener 
{ 

    Button btn; 
    TextView textview; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     textview = (TextView)findViewById(R.id.textView2); 
     btn = (Button)findViewById(R.id.BtnGoToSecondActivity); 
     btn.setOnClickListener(this); 
    } 

    public void onClick(View v) 
    { 
     Intent secondActivityIntent = new Intent(this, SecondActivity.class); 
     secondActivityIntent.putExtra("Name", textview.getText()); 
     startActivity(secondActivityIntent); 
    } 
} 

代碼的每一位是有道理的,直到我打的「這個」關鍵詞在上面的例子。 我無法繞過用作「setOnClickListener()」方法調用中參數的「this」關鍵字。 我還沒有創建任何上面使用的類的實例。我怎樣才能引用一個不存在的實例?實例是否自動創建?

(我知道了「this」關鍵字是什麼和它做什麼,但在這種情況下,我沒有看到邏輯)

+0

仍在搜索?或需要任何幫助?如果需要幫助加入http://chat.stackoverflow.com/rooms/10629/agarwal –

回答

2

基本上,這行代碼:

btn.setOnClickListener(this); 

...是說明該事件偵聽器的按鈕,是你目前所在的同一個實例 - 鑑於類屬於(FirstActivity )實現了接口OnClickListener

是的,當您調用此方法時已創建一個實例,否則您根本無法調用該方法!您恰好在調用onCreate()方法時作爲參數傳遞給setOnClickListener當前的實例。

1

你的類是FirstActivity,它實現OnClickListener接口,方法內FirstActivity,「this」是對運行方法的FirstActivity類的實例的引用。(當Android運行該活動時,它創建該類的一個實例)。

由於FirstActivity也是一個OnClickListener,因此您將FirstActivity類的實例傳遞給setOnClickListener方法。

3

您問「實例是否自動創建?」對此的答案實際上是的。您的應用程序此Activity類的一個實例;該實例由框架創建並由框架用於處理各種事件。

2

如果你正在執行像onCreate()這樣的非靜態方法,那麼該對象顯然存在。您的Activity對象由Android調用(這就是爲什麼您必須將其包含在清單中)。

相關問題