2013-05-19 5 views
0

Итак, моя проблема в том, что ... Я начинаю с java и android. Я хочу сделать, чтобы логическое «активное» стало «истинным», когда нажата первая кнопка (поток необходим для другой части кода) , затем, когда нажата вторая кнопка & active == true, Player1Score становится +1. Так что проблема в том, что я не могу использовать не конечные переменные в потоке & my onClickListener, но я не могу использовать конечные переменные, потому что мне нужно изменить их в коде. Если возможно, дайте начинающим пользователям ответы, спасибо!Изменение переменных во внутреннем классе

[...] 
    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++; 
      } 
     } 
    }); 

ответ

1

Посмотрите java.util.concurrent.atomic.AtomicBoolean. Я думаю, это будет именно то, что вы хотите.

+0

Помогло много, спасибо! –

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++; 
     } 
+0

Это здорово, но как изменить исходное «активное» значение? В другом потоке? –

0

Еще один способ сделать сделать ваше логическое значение «летучий», то есть ее ключевое слово в Java, что делает нити для чтения значения этой конкретной переменной из основной памяти и не кэширования их значений. Для примера. volatile boolean active = false;

+0

Есть ли способ сделать это для ints? (У меня уже был ответ на этот вопрос, но спасибо) –

+0

он также может применяться к ints (только переменные без методов). –

Смежные вопросы