2012-03-06 50 views
7
package android.example; 

import android.app.Activity; 

import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

public class Android_eg1 extends Activity { 
    Button bt; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     bt=(Button)findViewById(R.id.click); 
     bt.setOnClickListener(new OnClickListener(){ 
      public void onClick(View v) { 
      // TODO Auto-generated method stub 
       Toast.makeText(getApplicationContext(), "You made a mess", Toast.LENGTH_LONG).show(); 
      } 

     }); 
     } //onCreate() 

}//class 

我是新來的Java,我知道核心Java的基本知識。 這是示例程序我試圖瞭解事件經過一個按鈕類處理。 我無法理解這一部分:setOnClickListener(新OnClickListener(){})

"bt.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v) { 
     // TODO Auto-generated method stub 
      Toast.makeText(getApplicationContext(), "You made a mess", Toast.LENGTH_LONG).show(); 
     } 

    });" 

的setOnClickListener(參數)他們爲什麼給函數的定義(公共無效的onClick(視圖v)})

這是可以接受的內幕?

回答

6

在java中,這是一個生成的類實現該接口。您可以在函數參數裏面的蒼蠅產生的一類,也可以創建一個外部類,以及將這個類的一個實例或實現你的activty並通過您的活動爲收聽由偵聽器所需要的接口。

3
setOnClickListener

接受一個OnClickListener對象作爲參數。基本上它是在參數中創建一個匿名子類OnClickListener

這就像在java中一樣,當你可以創建一個新的線程使用匿名的子類,例如:

Thread t = new Thread(new Runnable() 
    {  
     public void run(){...} 
    }); 
3

按鈕點擊是一個事件句柄。如果您實施OnClickListner而不是在示例代碼中使用,您可以清楚地瞭解其差異。當你實現了你的OnClickListner IDE顯示選項,使用相關OnClickListner接口未實現的方法。在那裏你可以看到public void onClick方法。如果我總結一下情景;

  • 你有一個按鈕
  • 你應該有監聽按鈕事件的接口 - OnClickListner
  • 設置你的按鈕事件監聽用戶事件 - button.setOnClickListner(this)
  • 你想幹什麼在事件發生後進行onClick方法

This full example code可能會給你一個清晰的認識。

2

OnclickListener是一個接口(Listener),setOnClickListener()是一個需要onClickListener類型的對象的方法。我們可以匿名創建課程。即通過調用類的無名稱(匿名類聲明)實現OnClickListener,因此它將不得不實現void onClick方法。因此,我們將有類型接口的對象,這是用於簡寫編程。有關匿名類進一步間隙請訪問http://www.techartifact.com/blogs/2009/08/anonymous-classes-in-java.html

0

與類型OnClickListener()

OnClickListener()的參數setOnClickListener功能是一個接口:(類似於C++抽象基類)

的代碼:

bt.setOnClickListener(new OnClickListener() 

    /* this is the definition of anonymous class which implements OnClickListener() */  
    /* equivalent to : 
class OnClickListener_implementation implements OnClickListener */ 
    { 
      public void onClick(View v) 
         { 
          //your code here 
          } 

    ); 

這意味着:通過聲明onClick來構造一個實現OnClickListener接口的類的對象