2015-04-11 3 views
0

Я хотел использовать массив в потоке, но я не знаю, куда поместить его так, что новый поток принимает его и использует его в методе выполненияпосылая переменную в нить

Мой код до сих пор является

public void game (Button[] temp) { 
     Thread check = new Thread(new startGame()); 
     check.start(); 
    } 
    class startGame implements Runnable { 
     startGame() {} 
     public synchronized void run() { 
      if (temp[0].getDrawingCacheBackgroundColor() == temp[1].getDrawingCacheBackgroundColor()) 
      { 
       temp[0].setVisibility(View.INVISIBLE); 
       temp[1].setVisibility(View.INVISIBLE); 
      } 
     } 
    } 

Я уверен, что я должен поставить temp внутри startGame() но где в классе StartGame я помещаю temp, так что я могу использовать его в если заявление?

+1

Вы не можете вызывать 'setVisibility' из фонового потока (или делать что-либо касающееся пользовательского интерфейса). Вы должны опубликовать это как runnable для обработчика основного потока ('Handler uiHandler = new Handler (Looper.getMainLooper()); uiHandler.post (runnable ...);') или использовать 'runOnUiThread (runnable)' изнутри деятельности. –

+0

что вы пытаетесь сделать на самом деле – Elltz

ответ

0

Попробуйте поместить его в свой класс startGame, который следует называть StartGame. Передача его в конструкторе и установка переменной класса в значение.

public void game (Button[] temp) { 
     Thread check = new Thread(new startGame(temp)); 
     check.start(); 
    } 
    class startGame implements Runnable { 
     private Button[] temp 
     startGame(Button[] temp) { 
      this.temp=temp; 
     } 
     public synchronized void run() { 
      if (temp[0].getDrawingCacheBackgroundColor() == temp[1].getDrawingCacheBackgroundColor()) 
      { 
       temp[0].setVisibility(View.INVISIBLE); 
       temp[1].setVisibility(View.INVISIBLE); 
      } 
     } 
    } 
+0

Я не думаю, что это сработало для меня – Kaisado

0

ug_ правильный. Сделайте это переменной класса, установите некоторые блокировки, если они общие, и получите доступ к ней, как и любую другую переменную класса.

Но, как заметил Аштон Энгберг в комментарии, вы не можете изменять элементы пользовательского интерфейса из-за пределов пользовательского интерфейса.

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