以下情況:等待2個點擊事件,直到繼續不起作用
我編寫了一個適用於Android的Domino遊戲。在比賽開始時,如果不是機器人是首發球員,那麼用戶應該挑選兩塊進入棋盤的多米諾骨牌。
概述我不工作的做法:
一個空的ArrayList的定義,即重視對每一個多米諾點擊監聽器函數的調用屬於用戶後跟一個while循環,什麼也不做,應該只是在機制等待,直到用戶選擇了兩個多米諾骨牌。這些多米諾骨牌應存儲在該ArrayList(添加骨牌在FirstDominosPickerListener該ArrayList)
代碼
在活動:
ArrayList<Domino> starterDominos = new ArrayList<Domino>();
startingPlayer.chooseStartDominos(starterDominos);
功能:
public void chooseStartDominos(ArrayList<Domino> starterDominos){
///Every Domino gets a ClickListener
for (Domino domino : playerSet){
domino.setOnClickListener(new FirstDominosPickerListener(starterDominos));
}
//The idea is to wait until the user has picked two Dominos. With that loop, no UI at all shows up
while (starterDominos.size()<2){
Log.v(LOG_TAG," WAIT!!!!");
}
}
問題是while循環。隨着循環,沒有UI顯示,我得到一個空的白色屏幕,儘管代碼運行。在logcat中,我得到無限的「等待」消息。不知道爲什麼。
我已經嘗試了第二種方法是調用一個定時器任務在活動中,檢查後如果兩個多米諾骨牌被挑選(通過列表的大小)starterDominos = startingPlayer.chooseStartDominos(starterDominos);
我意識到,不能因爲工作在另一個線程中運行,因此無法訪問UI的任何部分。但選擇多米諾骨牌的機制奏效了。 UI出現了,run()
結束後二骨牌是通過cancel()
採摘。
那麼,爲什麼while循環導致這種行爲?是整個方法錯了,如果是這樣我能做些什麼,該應用程序等待,直到骨牌挑選,然後進行
我可能會建議您通過幾個安卓教程工作,你在潛水前,不要吝嗇過於關鍵,但你的代碼顯示了有關應用程序的Android是如何工作的一個非常基本的知識的缺乏。 – JJF
我已經完成了教程。你能更具體嗎? – Reinmarius
你應該明白*爲什麼* RE主線程被阻止的答案是正確的。你知道主線程是什麼嗎?你知道爲什麼你不能阻止主線程嗎?你知道這意味着什麼阻止線程嗎?你知道什麼是線程嗎?這些東西。 – JJF