更改内部类中的变量

时间:2013-05-19 15:48:17

标签: android

所以,我的问题是......我是java和android的初学者。 我想要做的是当点击第一个按钮时,让布尔“active”变为“true”(该代码的其他部分需要该线程) 然后,当点击第二个按钮时active == true,Player1Score变为+1。 所以问题是我不能在线程中使用非最终变量。我的onClickListener,但我不能使用final变量,因为我需要在代码中更改它们。 如果可能的话,请提供初学者友好的答案,谢谢!

    [...]
    boolean active;
    int Player1Score, Player2Score;

    Player1Score = 0;
    Player2Score = 0;


    Button button_launch = (Button) findViewById(R.id.button_launch);
    button_launch.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            [...]

            new Thread(new Runnable() {
                public void run() {
                    [...]

                    active = true;

                }

            }).start();

        }
    });

    [...]

    Button button_player1 = (Button) findViewById(R.id.button1);
    button_player1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            if(active == true){

                Player1Score++;
            }
        }
    });

3 个答案:

答案 0 :(得分:1)

看看java.util.concurrent.atomic.AtomicBoolean。我认为它将完全符合您的要求。

答案 1 :(得分:0)

可以避免这种情况的一种方法是在侦听器中使用另一个变量

final boolean variable = active;
Button button_player1 = (Button) findViewById(R.id.button1);
button_player1.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {

        if(variable == true){

            Player1Score++;
        }

答案 2 :(得分:0)

另一种方法是使你的布尔值“易变”,即它是java中的一个关键字,它使线程从主内存读取特定变量的值而不缓存它们的值。 例如。 volatile boolean active = false;