如何在按钮的onclicklistener方法中使用循环迭代变量

时间:2013-01-28 16:58:25

标签: java android eclipse for-loop

这是我的代码..

for (int i = 0; i < 12; i++) 
   {
          buttons[i] = (Button)findViewById(R.id.buttonid);
        @Override
        public void onClick(View v) {
           // in this method I want to set the button text to the iteration variable 'i'
        }
    });
   }

我需要在onclick方法中获取迭代变量。我尝试在onclick方法之前将i值赋给另一个int变量(使用和不使用final)。但所有这些都显示出一些错误。

提前致谢。

2 个答案:

答案 0 :(得分:2)

通过在方法之外的类顶部声明i变量使其变为全局变量。 private int i; http://en.wikipedia.org/wiki/Global_variable

然后你不需要在for循环中说int

for (i = 0; i < 12; i++) 
   {
         buttons[i] = (Button)findViewById(R.id.buttonid);
        @Override
        public void onClick(View v) {
           // in this method I want to set the button text to the iteration variable 'i'
        }
    });
   }

您还可以使用评论中提到的最终修饰符,如果您希望我们调试您的错误,您必须发布尝试使用它的方式。

答案 1 :(得分:0)

您可以放弃将i变量作为全局/最终变量,并使用setTag() Button方法传递值。

   for (int i = 0; i < 12; i++) {
          buttons[i] = (Button)findViewById(R.id.buttonid);
          buttons[i].setTag(new Integer(i));
          buttons[i].setOnClickListener(listener);
   }

并将OnClickListener

分开
    OnClickListener listener = new View.OnClickListener() {

        @Override
        public void onClick(View v) {
               Integer iHolder = v.getTag();
               int i = iHolder.intValue();
               // set button text
        }
    };

这样Button本身就会保留对i值的引用,而不是全局浮动或声明为final