2013-05-09 74 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