2011-02-10 109 views
2

我是新來的Java與C家庭背景。 我無法剖析此代碼。如果你能幫助我通過識別什麼是內部類和接口在此塊:傳遞給OnClickListener()的參數是什麼?

startButton.setOnClickListener(new View.OnClickListener(){ 
        public void onClick(View view) 
        {         
                              
        usrnameobj = (EditText)findViewById(R.id.et_usename); 
           usrpassobj = (EditText)findViewById(R.id.et_password); 
        String username = usrnameobj.getText().toString(); 
        String password = usrpassobj.getText().toString(); 
        
        Intent i=new Intent(getApplicationContext(),AndroidXmlResource.class); 
        i.putExtra("entry",username.toString() + password.toString()); 
        startActivityForResult(i,REQ_CODE); 
      
        }   
       }); 

我只能想象高達:

startButton.setOnClickListener(new View.OnClickListener());

但之間沒有{}

+0

我不會說這是一個很好的問題,但它是一個可愛的問題.... –

+0

對於習慣於在將它們作爲參數傳遞之前創建對象的人來說不可愛: – chunkyguy

回答

2

OnClickListener是一個接口定義到視圖。想象一下這樣的:

class View 
{ 
    static interface OnClickListener 
    { 
     public void onClick(View v); 
    } 
} 

之間{事情}是OnClickListener接口的方法onClick(View)的實施。 ()開始new...之間的東西被稱爲匿名內部類。您可能會發現更多解釋here

乾杯!

0

的提到的示例代碼包含一個匿名內部類。

這裏的用戶名&正在提取密碼數據&下一個活動正在被用戶點擊開始按鈕時被調用。

請查看以下網址:

http://www.remwebdevelopment.com/dev/a69/Different-Ways-To-Handle-Clicks.html

請回復任何澄清

2

它創建一個實現了View.OnClickListener接口的匿名類。當你需要接收和處理View上的點擊時,你會這樣做,但不希望爲這個簡單的過程創建一個正式的類(你最終會得到很多這樣的類)。

檢查出this匿名類的解釋。

+0

謝謝!我想我需要閱讀很多關於這個:) – chunkyguy

2

發送的內容有一個匿名類,您可以創建一個單獨的類來實現OnClickListener並創建該類的實例並將其作爲參數發送給setOnClickListener。

「public void onClick(View view)」是需要重寫的函數,當您點擊setOnClickListener的類時會調用這個函數。因此,在這種情況下,它會從表單中提取密碼和用戶名,並啓動意向集的活動。

1

setOnClickListener方法將新的View.OnClickListener()實例作爲參數,大括號內發生的事情正在重寫該類的onClick()方法。我認爲你可以輕鬆剖析onClick()方法。

0

你可以做 要麼

btn.setOnClickListener(this); 

接着出來的onCreate()做

public void onClick(View v) { 
    switch(v.getId()) { 

    case R.id.Button: 
     //do what you like to do 
     break; 
    } 
} 

btn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 


          // do what you like to do 
     } 

}); 
相關問題