Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用循环定义onClickListeners_Android_Loops_Onclicklistener - Fatal编程技术网

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