检测哪个按钮被按下
Detect which button was pressed
这是我的情况:
我以编程方式为一些按钮提供了一个 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++;
}
}
如您所见,他们没有为每个点击监听器,所以当我按下我的按钮时,mplayer 总是寻找一个点,因为 songProgress 停止在 64(我有 64 个按钮要处理)。好的是我为每个按钮都有一个数字(如您所见 button.setText("" + number);),我想检查它们的数字是多少以赋予 songProgress 不同的值。
您的 onClick
有一个 View v
对象,它应该是触发事件的视图。所以这个视图应该是你的按钮。
现在您可以使用 v.getText()
获取该按钮的文本。然后将文本解析为您的号码并使用它。
如果您想知道按下按钮的文本,请使用this:
public void onClick(View v) {
Button b = (Button)v;
String buttonText = b.getText().toString();
//Do your thing with buttonText
}
如果我理解正确,你可以这样做:
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);
}
}
并在 onClick 中
@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;
}
}
这是我的情况: 我以编程方式为一些按钮提供了一个 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++;
}
}
如您所见,他们没有为每个点击监听器,所以当我按下我的按钮时,mplayer 总是寻找一个点,因为 songProgress 停止在 64(我有 64 个按钮要处理)。好的是我为每个按钮都有一个数字(如您所见 button.setText("" + number);),我想检查它们的数字是多少以赋予 songProgress 不同的值。
您的 onClick
有一个 View v
对象,它应该是触发事件的视图。所以这个视图应该是你的按钮。
现在您可以使用 v.getText()
获取该按钮的文本。然后将文本解析为您的号码并使用它。
如果您想知道按下按钮的文本,请使用this:
public void onClick(View v) {
Button b = (Button)v;
String buttonText = b.getText().toString();
//Do your thing with buttonText
}
如果我理解正确,你可以这样做:
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);
}
}
并在 onClick 中
@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;
}
}