Android 检测按下了哪个按钮

Android 检测按下了哪个按钮,android,button,onclicklistener,tablerow,Android,Button,Onclicklistener,Tablerow,我的情况如下: 我以编程的方式给一些按钮一个onClickListener,但是,我不能完全处理这个事件,因为我想检测哪个按钮被按下,给那个按钮(当它被按下时)一个新值。下面是我如何编程这些按钮: final View.OnClickListener soundButtonListener = new View.OnClickListener() { public void onClick(View v) { playSound(1);

我的情况如下: 我以编程的方式给一些按钮一个onClickListener,但是,我不能完全处理这个事件,因为我想检测哪个按钮被按下,给那个按钮(当它被按下时)一个新值。下面是我如何编程这些按钮:

  final View.OnClickListener soundButtonListener = new View.OnClickListener() {
            public void onClick(View v) {
                playSound(1);

                int x = songPlay * songProgress;

                mplayer.seekTo(x);
            }
        };

        tableLayout = (TableLayout)v
                .findViewById(R.id.tableLayout);

        int number = 1;
        for (int i = 0; i < tableLayout.getChildCount(); i++) {
            TableRow row = (TableRow)tableLayout.getChildAt(i);
            for (int j = 0; j < row.getChildCount(); j++) {
                Button button = (Button) row.getChildAt(j);
                button.setText("" + number);

                button.setOnClickListener(soundButtonListener);
                songProgress = j;
                number++;
            }
        }
final View.OnClickListener soundButtonListener=new View.OnClickListener(){
公共void onClick(视图v){
播放声音(1);
int x=歌曲播放*歌曲进度;
mplayer.seekTo(x);
}
};
tableLayout=(tableLayout)v
.findViewById(R.id.tableLayout);
整数=1;
对于(int i=0;i

正如你所看到的,他们没有一个点击监听器,所以当我按下我的按钮时,mplayer总是寻找一个点,因为songProgress停止在64(我有64个按钮要处理)。好的是,我为每个按钮都有一个数字(如您所看到的button.setText(“+number”)),我想检查它们的数字是多少,以赋予songProgress不同的值。

您的
onClick
有一个
视图v
对象,它应该是触发事件的视图。所以这个视图应该是你的按钮。
现在,您可以使用
v.getText()
获取该按钮的文本。然后将文本解析为您的数字并使用它。

如果您想知道按下按钮的文本,请使用:


如果我理解正确,您可以这样做:

final View.OnClickListener soundButtonOnClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if(v instanceof Button) {
            Button button = (Button) v;
            String text = button.getText().toString();

            if(text == "1") {
                //...
            } else if(text == "2") {

            }
            //OR
            switch (text) {
                case "1": {
                    break;
                }
                case "2": {
                    break;
                }
                //...
            }
        }
    }
};
但我认为最好使用标签而不是文本:

//set tag for your button
button.setTag(number); 

//use this tag
Integer number = (Integer) v.getTag();
if(number != null) {
    //...
}

检测按钮非常简单。简单地说,你可以这样做

button.setId(2000 + 0);
作为参考,你可以查一下-

  for (int i = 0; i < ch.length; i++) {
     Button button = new Button(this);
     button.setTextColor(context.getResources().getColor(R.color.black));
     button.setPadding(5, 5, 5, 5);
     if (Integer.parseInt(String.valueOf(ch[i])) == 0) {
            button.setText("No");
            button.setId(2000 + 0);
            layout.addView(button, layoutParams);
            button.setOnClickListener(this);
        }
        if (Integer.parseInt(String.valueOf(ch[i])) == 1) {
            button.setText("Less");
            button.setId(2000 + 1);
            layout.addView(button, layoutParams);
            button.setOnClickListener(this);
        }
        if (Integer.parseInt(String.valueOf(ch[i])) == 2) {
            button.setText("Half");
            button.setId(2000 + 2);
            layout.addView(button, layoutParams);
            button.setOnClickListener(this);
        }
}

你能详细说明一下吗。我不太清楚,我猜这就是你要找的。它不能完全工作,因为它从button@BitleApps你是什么意思?我解决了这个问题,但我的“x”没有增加(歌曲播放不是0)
  for (int i = 0; i < ch.length; i++) {
     Button button = new Button(this);
     button.setTextColor(context.getResources().getColor(R.color.black));
     button.setPadding(5, 5, 5, 5);
     if (Integer.parseInt(String.valueOf(ch[i])) == 0) {
            button.setText("No");
            button.setId(2000 + 0);
            layout.addView(button, layoutParams);
            button.setOnClickListener(this);
        }
        if (Integer.parseInt(String.valueOf(ch[i])) == 1) {
            button.setText("Less");
            button.setId(2000 + 1);
            layout.addView(button, layoutParams);
            button.setOnClickListener(this);
        }
        if (Integer.parseInt(String.valueOf(ch[i])) == 2) {
            button.setText("Half");
            button.setId(2000 + 2);
            layout.addView(button, layoutParams);
            button.setOnClickListener(this);
        }
}
 @Override
public void onClick(View v) {
    switch (v.getId()) {
        case 2000:
            Log.e(TAG,"button 0 clicked");
            break;
        case 2001:
            Log.e(TAG,"button 1 clicked");
            break;
        case 2002:
            Log.e(TAG,"button 2 clicked");
            break;
        case 2003:
            Log.e(TAG,"button 3 clicked");
            break;
    }
}