2013-05-09 108 views
3

我想修復我的按鈕點擊事件,現在我有每個按鈕都反應相同。我希望每個按鈕最終能做出不同的事情。我的代碼目前是:Gridview按鈕

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    Button myButton; 

    if (convertView == null) { 
     myButton = new Button(mContext); 
     myButton.setLayoutParams(new GridView.LayoutParams(230, 150)); 
     myButton.setPadding(8, 8, 8, 8); 

     convertView = myButton; 
    } else { 
     myButton = (Button) convertView; 
    } 

    myButton.setText(mButtons[position]); 
    myButton.setId(position); 
    myButton.setOnClickListener(new MyOnClickListener(position)); 
    return convertView; 
} 

class MyOnClickListener implements OnClickListener { 

    private final int position; 
    final MediaPlayer mpButton1Click = MediaPlayer.create(mContext, 
      R.raw.myAudio); 

    public MyOnClickListener(int position) { 

     this.position = position; 

    } 

    public void onClick(View v) { 

     int position = v.getId(); 

     if(position == 0){ 
     mpButton1Click.start(); 
     } 

    } 

} 

我目前使用的媒體播放器,但可能會改變。我知道我需要傳遞onClick()方法中的各個按鈕位置,但我無法弄清楚如何做到這一點(或者如果有更簡單的方法)。任何幫助,將不勝感激。

+2

你已經做到了:你已經添加'SETID(位置)'。所以在你的* OnClickListener *中:使用'int position = v.getId();'。瞧,你有你的位置。 – 2013-05-14 05:33:19

+0

只需知道你的位置int position = v.getId();像@SherifelKhatib在你的onClick()實現中提到過。 – jaga 2013-05-15 06:57:59

+0

好吧,我明白這一點。現在,如果我在onClick中使用「位置」,我該怎麼做。我編輯我的代碼的方式是 – 2013-05-16 19:46:21

回答

2

您應該爲每個按鈕使用一個標籤,您將能夠區分它們。

button.setTag(Integer.valueOf(position); 

在onClickListener你就必須做到這一點:

Integer position = (Integer)view.getTag(); 
+0

所以,我甚至需要有我自己的onClickListener? – 2013-05-09 21:24:39

+2

不,因爲位置是由標籤視圖給出的。你可以在經典的監聽器中訪問它,它是參數。 – cremy 2013-05-10 07:54:06

+0

好吧,我很困惑,你的意思是在onClickListener添加位置變量。我需要在onClick中使用它嗎? – 2013-05-10 15:21:31