因为按钮比较多,所以用了一个for循环
但是总是运行错误
好像是这个函数出问题 public void onClick(View v)
但是如果我不用for循环,把这25个监听器拿到for外面实现,就没有问题
不知这是什么原因,请大虾指教
public void SetOnClickListener() {
for (mClickIndex = 0; mClickIndex < 25; mClickIndex++) {
mButton[mClickIndex].setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
if (mStage_num == mButton_num[mClickIndex]) {
mStage_num ++;
stage_num_text.setText("touch >>> " + String.valueOf(mStage_num));
} else {
// error
}
}
});
}
}
12 个解决方案
#1
我的代码是能够正常工作的。
希望能提供一下log分析下,初步认为是mClickIndex的值被修改,越界了。
mButton = new Button[4];
mButton[0] = (Button)findViewById(R.id.button1);
mButton[1] = (Button)findViewById(R.id.button2);
mButton[2] = (Button)findViewById(R.id.button3);
mButton[3] = (Button)findViewById(R.id.button4);
for(int i = 0; i < 4; i++){
mButton[i].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.i("test", "" + v.getId());
}
});
}
希望能提供一下log分析下,初步认为是mClickIndex的值被修改,越界了。
#2
谢谢你的回答
但是不知有否运行程序?
因为有点怀疑
for循环里的变量i好像传不到mButton[i].setOnClickListener()里面去
必须要定义成成员变量或者全局变量
但是不知有否运行程序?
因为有点怀疑
for循环里的变量i好像传不到mButton[i].setOnClickListener()里面去
必须要定义成成员变量或者全局变量
#3
程序我是运行过的 并且有log打印出来
#4
LZ说的那个应该不会的!
看看会不会是数组越界的问题哦
看看会不会是数组越界的问题哦
#5
你的代码确实是没有问题的,但是你试着往public void onClick(View v) {}里面传个参数,
比如说把for循环的i传进去,就会有问题了
#6
知道错误所在了,监听到按钮,传到public void onClick(View v) {}里面的mClickIndex都已经变成25了,数组必然越界了。因为onClick(View v)这个函数要等监听之后才执行
#7
大家有没有办法把没有变化之前的mClickIndex传到onClick(View v)里面去
就是说不同按钮onClick(View v)里面的mClickIndex对应各自的检索值
就是说不同按钮onClick(View v)里面的mClickIndex对应各自的检索值
#8
我现在也有同样的问题,监听器只执行循环的最后一个按钮
#9
貌似最简单的方法是一个button做一个监听函数, 不然真没办法区分处理监听函数里面处理的是哪个button
#10
i传不进去和变量的作用域有关系吧~
用全局变量也不能解决你的问题
除非能知道当前被按下button类似id的东西
#11
今天看了个帖子,貌似有解决方法,不知LZ是不是已经发现了
http://blog.csdn.net/Android_Tutor/archive/2010/07/16/5740845.aspx
sButton.setOnClickListener(this); //两个button设同一个listen
pButton.setOnClickListener(this);
//铵钮点击事件响应
public void onClick(View v) {
if(v == sButton){
SerializeMethod();
}else{
PacelableMethod();
}
}
http://blog.csdn.net/Android_Tutor/archive/2010/07/16/5740845.aspx
sButton.setOnClickListener(this); //两个button设同一个listen
pButton.setOnClickListener(this);
//铵钮点击事件响应
public void onClick(View v) {
if(v == sButton){
SerializeMethod();
}else{
PacelableMethod();
}
}
#12
mClickIndex确实传不进,除非是包含该类的类的一个属性。我也碰到过这种问题。。。
#1
我的代码是能够正常工作的。
希望能提供一下log分析下,初步认为是mClickIndex的值被修改,越界了。
mButton = new Button[4];
mButton[0] = (Button)findViewById(R.id.button1);
mButton[1] = (Button)findViewById(R.id.button2);
mButton[2] = (Button)findViewById(R.id.button3);
mButton[3] = (Button)findViewById(R.id.button4);
for(int i = 0; i < 4; i++){
mButton[i].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.i("test", "" + v.getId());
}
});
}
希望能提供一下log分析下,初步认为是mClickIndex的值被修改,越界了。
#2
谢谢你的回答
但是不知有否运行程序?
因为有点怀疑
for循环里的变量i好像传不到mButton[i].setOnClickListener()里面去
必须要定义成成员变量或者全局变量
但是不知有否运行程序?
因为有点怀疑
for循环里的变量i好像传不到mButton[i].setOnClickListener()里面去
必须要定义成成员变量或者全局变量
#3
程序我是运行过的 并且有log打印出来
#4
LZ说的那个应该不会的!
看看会不会是数组越界的问题哦
看看会不会是数组越界的问题哦
#5
你的代码确实是没有问题的,但是你试着往public void onClick(View v) {}里面传个参数,
比如说把for循环的i传进去,就会有问题了
#6
知道错误所在了,监听到按钮,传到public void onClick(View v) {}里面的mClickIndex都已经变成25了,数组必然越界了。因为onClick(View v)这个函数要等监听之后才执行
#7
大家有没有办法把没有变化之前的mClickIndex传到onClick(View v)里面去
就是说不同按钮onClick(View v)里面的mClickIndex对应各自的检索值
就是说不同按钮onClick(View v)里面的mClickIndex对应各自的检索值
#8
我现在也有同样的问题,监听器只执行循环的最后一个按钮
#9
貌似最简单的方法是一个button做一个监听函数, 不然真没办法区分处理监听函数里面处理的是哪个button
#10
i传不进去和变量的作用域有关系吧~
用全局变量也不能解决你的问题
除非能知道当前被按下button类似id的东西
#11
今天看了个帖子,貌似有解决方法,不知LZ是不是已经发现了
http://blog.csdn.net/Android_Tutor/archive/2010/07/16/5740845.aspx
sButton.setOnClickListener(this); //两个button设同一个listen
pButton.setOnClickListener(this);
//铵钮点击事件响应
public void onClick(View v) {
if(v == sButton){
SerializeMethod();
}else{
PacelableMethod();
}
}
http://blog.csdn.net/Android_Tutor/archive/2010/07/16/5740845.aspx
sButton.setOnClickListener(this); //两个button设同一个listen
pButton.setOnClickListener(this);
//铵钮点击事件响应
public void onClick(View v) {
if(v == sButton){
SerializeMethod();
}else{
PacelableMethod();
}
}
#12
mClickIndex确实传不进,除非是包含该类的类的一个属性。我也碰到过这种问题。。。