Android 使用循环定义onClickListeners
我有以下代码:Android 使用循环定义onClickListeners,android,loops,onclicklistener,Android,Loops,Onclicklistener,我有以下代码: imageButtonArray[0].setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(Algebra
imageButtonArray[0].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(Algebra.this, GeneralSubject.class);
intent.putExtra("numberOfMovies", numberOfMoviesArray[0]);
intent.putExtra("titleName", titleNamesArray[0]);
intent.putExtra("numOfIndex", "0");
startActivity(intent);
}
});
imageButtonArray[1].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(Algebra.this, GeneralSubject.class);
intent.putExtra("numberOfMovies", numberOfMoviesArray[1]);
intent.putExtra("titleName", titleNamesArray[1]);
intent.putExtra("numOfIndex", "1");
startActivity(intent);
}
});
它很好用
当我尝试将该代码更改为:
for (i=0;i<2;i++){
imageButtonArray[i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(Algebra.this, GeneralSubject.class);
intent.putExtra("numberOfMovies", numberOfMoviesArray[i]);
intent.putExtra("titleName", titleNamesArray[i]);
intent.putExtra("numOfIndex", String.valueOf(i));
startActivity(intent);
}
});
}
for(i=0;i因为您将i
保留为类成员(我的假设是基于在其他地方我看不到它声明为final的事实),循环结束时i
将是2
。当您单击按钮时
private class MyOnClickListener implements OnClickListener {
private int mNumberOfMovies;
private String mTitleName;
private int mIndex;
public MyOnClickListener(int numberOfMovies, String titleName, int index) {
mNumberOfMovies = numberOfMovies;
mTitleName = titleName;
mIndex = index;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(Algebra.this, GeneralSubject.class);
intent.putExtra("numberOfMovies", mNumberOfMovies);
intent.putExtra("titleName", mTitleName);
intent.putExtra("numOfIndex", mIndex);
startActivity(intent);
}
}
在你的活动中
for (i=0;i<imageButtonArray.length;i++){ //Change this line
imageButtonArray[i].setOnClickListener(new MyOnClickListener(numberOfMoviesArray[i], titleNamesArray[i] ,i));
}
用于(i=0;iOn它引发异常的行是哪一行?@ElefantPhace否。何时发生?当您单击按钮时?尝试清理并重建您的项目!但如果这样做有效,则表示数组长度小于2。如果是这样,则OP的第一个工作版本也会引发异常。这取决于n java如何使用类成员实现闭包。OP将i保留为类成员。我的假设基于这样一个事实,即我无法在其他地方将其声明为final。循环结束时,我将为2。如果OP单击按钮,它将访问一个不存在的位置。当然,这取决于java如何使用h类成员,在什么情况下会发生异常@chiastic-security@Blackbelt,我得到了以下编译错误:在作用域中没有可访问的类型代数的封闭实例。我如何处理它?代数在同一个包中。至于数组的长度,即使它的长度为5,它仍然生成相同的p问题。@Maorychyeh我忘了提到MyOnClickListener必须是活动代数的内部类,但它在putExtra行上仍然失败…这次出现了NullPointerException