2012-01-14 49 views
1

我不明白爲什麼我必須實現OnClickListener才能使用OnClick方法。假設這個代碼:通過活動實現OnClickListener的效果如何?

public class KlickitestActivity extends Activity implements OnClickListener { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
} 

@Override 
public void onClick(View v) { 
    // code what happens when a click is made 
} 

從類OnClickListener我只使用方法onClick(視圖v) - 這一個被覆蓋。爲什麼我不能在不實現OnClickListener的情況下定義onClick方法?

回答

5

您可以。你可以通過使用匿名內部類:

Button1.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      //Do stuff 
     }}); 
Button2.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      //Do stuff 
     }}); 

然而實現一個OnClickListener可以更容易地處理事件,並提高了代碼的可讀性。即你可以使用一個監聽器方法,並傳遞一個View來處理多個按鈕/與switch語句聽衆,類似的東西:

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

    case R.id.Button1: 
     //Stuff for button 1 
     break; 

    case R.id.Button2: 
     //Stuff for button 2 
     break; 
     break; 

    case R.id.Button3: 
     //Stuff for button 3 
     break; 
    } 
+0

謝謝,暴民,這對我來說是一個非常可以理解的答案!但是我仍然不明白當我實現OnClickListener時會發生什麼。我的意思是它沒有實例化一個OnClickListener的新對象,只是通過實現? (希望我的語言是可以理解的:-) – BNetz 2012-01-15 00:15:10

+1

實現OnCLickListener有效地使您的Activity類都是一個Activity和一個OnCLickListener,這意味着您可以將Activity的實例傳遞給以OnClickListener作爲參數的對象。 http://docs.oracle.com/javase/tutorial/java/concepts/interface.html – 2012-01-15 00:37:36

+0

謝謝,斯科特的解釋! – BNetz 2012-01-15 13:49:45

1

只是對挑戰者的回答擴大,也斯科特的評論和鏈接...

Activity主要是UI的框架,因此沒有與用戶交互的預定義方式。作爲設計者/開發者,我們根據Activity的目的選擇我們想要的Activity包含哪些UI組件。

的UI組件,例如ButtonsCheckBoxesListViews等,服務非常不同的目的,它不是在它的Activity的地方的基本形式,以瞭解事件的UI元素(點擊,長點擊反應,滑動等),因爲沒有預定義的UI元素集合,Activity將始終託管。因此,我們有責任根據我們如何設計UI來實現我們需要使用的事件處理程序(偵聽器)。