我目前正在使用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");
}
});
}
答案 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