所以我对Android开发者来说相当新,我想让跟随代码在一个单独的线程上运行,
public void game (final Button[] temp) {
if (temp[0].getBackground().equals(temp[1].getBackground()) )
{
temp[0].setVisibility(View.INVISIBLE);
temp[1].setVisibility(View.INVISIBLE);
finishedGame++;
} else
{
temp[0].setBackgroundResource(R.drawable.black);
temp[1].setBackgroundResource(R.drawable.black);
}
}
所以我将代码更改为以下内容:
public void game (final Button[] temp) {
class startGame implements Runnable {
startGame() {}
public synchronized void run() {
if (temp[0].getBackground().equals(temp[1].getBackground()) )
{
temp[0].setVisibility(View.INVISIBLE);
temp[1].setVisibility(View.INVISIBLE);
finishedGame++;
} else
{
temp[0].setBackgroundResource(R.drawable.black);
temp[1].setBackgroundResource(R.drawable.black);
}
}
}
}
我只是想知道我是否做得对,在我将其放入onClickListener中的onClick之前,我确切地将代码调用此方法的位置
View.OnClickListener listener1 = new View.OnClickListener() {
@Override
public void onClick(View view) {
button[0].setBackground(image[0]);
if (state == 1) {
temp[1] = button[0];
game(temp);
}
}
};
游戏(临时)将是我以前称之为方法的方法。
我认为我需要调用线程的代码是
Thread xxx = new Thread(startGame);
xxx.start();
但我不确定,也不确定放在哪里。
答案 0 :(得分:0)
UI元素(视图)的更改必须出现在主UI线程上 - 所以调用 温度[0] .setBackgroundResource(R.drawable.black); 要么 温度[0] .setVisibility(View.INVISIBLE); 会失败。
在onClick方法中执行以下操作
View.OnClickListener listener1 = new View.OnClickListener() {
@Override
public void onClick(View view) {
button[0].setBackground(image[0]);
if (state == 1) {
temp[1] = button[0];
view.post(new Runnable() {
public void run() {
if (temp[0].getBackground().equals(temp[1].getBackground()) )
{
temp[0].setVisibility(View.INVISIBLE);
temp[1].setVisibility(View.INVISIBLE);
finishedGame++;
}
else
{
temp[0].setBackgroundResource(R.drawable.black);
temp[1].setBackgroundResource(R.drawable.black);
}
}
});
}
}
};