final int的值为int

时间:2013-06-16 08:26:00

标签: java android

我目前正在使用android SDK(eclipse),我正在尝试制作一个简单的基于按钮的TicTacToe游戏。

我制作了一个数组,我保存按钮,我正在尝试动态制作ClickEvents:

这是代码(到目前为止有效):

public class MainActivity extends Activity 
{
final Button[] buttons = new Button[9];
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    buttons[0] = (Button) findViewById(R.id.button1);
    buttons[1] = (Button) findViewById(R.id.button2);
    buttons[2] = (Button) findViewById(R.id.button3);
    buttons[3] = (Button) findViewById(R.id.button4);
    buttons[4] = (Button) findViewById(R.id.button5);
    buttons[5] = (Button) findViewById(R.id.button6);
    buttons[6] = (Button) findViewById(R.id.button7);
    buttons[7] = (Button) findViewById(R.id.button8);
    buttons[8] = (Button) findViewById(R.id.button9);

    for(int i = 0;i < 9;i++)
    {
        buttons[i].setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View arg0)
            {
                // 
            }
        });
    }
}

}

当我尝试使用&#39; i&#39;引用onClick-Method中的按钮时出现问题。 例如:

            @Override
            public void onClick(View arg0)
            {
                             //buttons[0].setText("X"); works by the way
                buttons[i].setText("X");

            }
Eclipse告诉我:&#34;改变修饰符&#39; i&#39;最终&#34;

嗯,但如果&#39;我&#39;将是最终的,我无法增加“我”。在循环中。

所以我试过这个:

            @Override
            public void onClick(View arg0)
            {
                            final int position = i;
                buttons[position].setText("X");
            }

最终会产生相同的错误&#34;更改修饰符&#39; i&#39;最终&#34;

所以我的问题是:我怎样才能做到这一点?

我试过谷歌,但我找不到任何东西,这真的是我第一次遇到这个问题。

希望你们能帮助我!


编辑:

解决方案很简单,这是现在正在运行的代码:

        for(int i = 0;i < 9;i++)
    {
        final int position = i;
        buttons[i].setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View arg0)
            {
                buttons[position].setText("X");
            }
        });
    }

3 个答案:

答案 0 :(得分:2)

您可以这样做:

for(int i = 0;i < 9;i++)
   {

      final int position = i;

      buttons[i].setOnClickListener(new View.OnClickListener()
      {
         @Override
         public void onClick(View arg0)
         {
            buttons[position].setText("X"); 
         }
      });
}

答案 1 :(得分:1)

在循环中创建另一个最终的int var,将其设置为与i相同的值,并从您的侦听器中引用此var。

for(int i = 0;i < 9;i++)
{
    final int index = i;
    buttons[i].setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View arg0)
        {
            buttons[index].setText("X");
        }
    });
}

答案 2 :(得分:0)

有一个单独的类来实现View.OnClickListener并且有一个构造函数来接受index value