2013-04-02 120 views

回答

3

您不必爲所有圖像使用不同的處理程序。對所有圖像使用一個處理程序。這將使你的代碼更加清潔,易於管理並解決你的問題。

public void onCreate(Bundle bundle) { 
    //... 

    OnClickListener mHandler = new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      switch(v.getId()) { 
       case R.id.img1: 
        //.. 
        break; 

       case R.id.img2: 
        //.... 
        break; 
      } 
     } 
    }; 

    ImageButton btn1 = (ImageButton)findViewById(R.id.img1); 
    ImageButton btn2 = (ImageButton)findViewById(R.id.img2); 
    //... 

    btn1.SetOnClickListener(mHandler); 
    btn2.SetOnClickListener(mHandler); 
    //... 
} 
+0

謝謝你的回答..你在你的代碼中提到的OnClickHandler類是你自己的類,因爲我找不到它。如果是這樣,它繼承了哪個類? –

+0

它在View.OnClickListener中。而且它是一個接口。如果你想要,你可以在你的類中實現接口,然後調用'btn.SetOnClickListener(this);' –

+0

對不起,那是我的錯。我把它拼寫成「OnClickHandler」。這當然是'OnClickListener'。直到現在我還沒有注意到它。 –

2

一個Listener來統治它們。

  1. 在物體上實現onClick(),其註冊爲監聽器

  2. onClick(),檢查作爲參數傳遞的View對象,以確定該圖像的被單擊。你可以做任何事情從getId()到鑄造它(ImageView)並獲得實際的圖像。

  3. 一旦你知道哪個圖像被點擊了,你會用它做什麼。

+0

在對象上實現onClick(),將其註冊爲偵聽器 - 你的意思是實現OnClickListener接口並重寫onClick()方法嗎? –

+0

確實。然後調用'setOnClickListener' – slezica

+0

好的..謝謝:) –

0

如果你正在尋找實現一個ImageView(或其他)定製行爲,然後有一個類型的視圖的多個實例,你應該繼承的ImageView,把你的聽衆在那裏。然後你會得到一個封裝的View,它實現了你想要的自定義行爲,如果你以後決定要多或少需要或者將它們放在另一個地方,那麼很容易移動View及其行爲而不會撕裂你的Activity